110,534
社区成员
发帖
与我相关
我的任务
分享
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:FileSelectorControl">
<Style TargetType="{x:Type local:FileSelector}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:FileSelector}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ScrollViewer Name="scrolls" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<ScrollViewer.Content>
<StackPanel Name= "multi_item" Orientation="Vertical" ScrollViewer.VerticalScrollBarVisibility="Auto">
<StackPanel Orientation="Horizontal" Height="30" Margin="0,5,0,0">
<Button Name="add_item" Content="增加" Margin="5,0,0,0" Width="80" ></Button>
<Button Name="del_item" Content="删除" Margin="5,0,0,0" Width="80" />
</StackPanel>
<StackPanel Name="stack_static" Orientation="Horizontal" Height="30" Margin="0,5,0,0">
<TextBox Name="textBox_FileFullName" Margin="5,0,5,0" Width="330"></TextBox>
<Label Content="名称" Margin="5,0,5,0"></Label>
<TextBox Name="displayName" Margin="5,0,5,0" Width="200"></TextBox>
<Button Name="button_browser" Content="浏览"/>
</StackPanel>
<StackPanel Name="dynamic_item">
</StackPanel>
</StackPanel>
</ScrollViewer.Content>
</ScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
using System;
using System.Linq; //程序用到LINQ
using System.Windows; //TemplatePartAttribute
using System.Collections.Generic;
using System.Windows.Controls; //Control
using System.Windows.Input; //RoutedUICommand
using Microsoft.Win32; //对话框OpenFileDialog
namespace FileSelectorControl
{
[TemplatePart(Name = "textBox_FileFullName", Type = typeof(TextBox))]
public class FileSelector : Control
{
static FileSelector()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(FileSelector), new FrameworkPropertyMetadata(typeof(FileSelector)));
}
public FileSelector():base()
{
}
#region 控件模板
Button add_item;
Button del_item;
Button btn1;
StackPanel multi_item;
StackPanel dynamic_item;
TextBox tbx ;
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
add_item = Template.FindName("add_item", this) as Button;
del_item = Template.FindName("del_item", this) as Button;
add_item.Click += new RoutedEventHandler(add_item_click);
del_item.Click += new RoutedEventHandler(del_item_click);
btn1 = Template.FindName("button_browser",this) as Button;
btn1.Click += new RoutedEventHandler(btn_click);
multi_item = Template.FindName("stackPanel_multiItem", this) as StackPanel;
dynamic_item = Template.FindName("stackPanel_dynamicItem", this) as StackPanel;
tbx = Template.FindName("textBox_FileFullName", this) as TextBox;
}
#endregion
#region 对话框处理
public string PredefinedExts { get; set; }
string GetFilterString(out string first)
{
first = null;
var exts = PredefinedExts.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
string head = string.Empty;
if (exts.Length != 0)
{
var trim = exts.Where(s => s.Trim() != String.Empty);
first = trim.FirstOrDefault();
head = String.Join("|", trim.Select(s => String.Format("{0}文件|*.{1}", s.ToUpper(), s.ToLower())));
}
if (head != String.Empty)
head += "|";
return head + "所有文件|*.*";
}
string OpenDialog()
{
var dlg = new OpenFileDialog();
string defExt;
dlg.Filter = GetFilterString(out defExt);
dlg.DefaultExt = defExt;
if (dlg.ShowDialog() == true)
return dlg.FileName;
return null;
}
#endregion
void add_item_click(object sender, RoutedEventArgs e)
{
StackPanel panel = new StackPanel();
panel.Orientation = Orientation.Horizontal;
panel.Margin = new Thickness(0, 5, 0, 0);
TextBox tbx = new TextBox();
tbx.Width = 330;
tbx.Height = 30;
tbx.Margin = new Thickness(5, 0, 5, 0);
Button btn = new Button();
btn.Content = "浏览";
btn.Click += new RoutedEventHandler(btn_click);
panel.Children.Add(tbx);
panel.Children.Add(btn);
//multi_item.Children.Remove();
dynamic_item.Children.Add(panel);
}
void del_item_click(object sender, RoutedEventArgs e)
{
int count = dynamic_item.Children.Count;
if(count>0){
dynamic_item.Children.RemoveAt(count-1);
}
}
void btn_click(object sender,RoutedEventArgs e) {
string path = OpenDialog();
Button btn = sender as Button;
StackPanel parent = btn.Parent as StackPanel;
foreach(var child in parent.Children){
if(child is TextBox){
((TextBox)child).Text = path;
}
}
}
}
}
主窗体的xaml文件如下
<Window x:Class="metadataTool.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:DevComponents.WpfEditors;assembly=DevComponents.WpfEditors"
Background="Chocolate" Title="元数据录入系统" Height="706" Width="1095" xmlns:my1="clr-namespace:FileSelectorControl;assembly=FileSelectorControl" xmlns:my2="clr-namespace:FileSelectorControl.Themes;assembly=FileSelectorControl">
<Grid Width="1009" Height="675">
<Menu Height="25" HorizontalAlignment="Left" Name="menu" VerticalAlignment="Top" Width="881" Margin="4,4,0,0">
<MenuItem Header="文件" Name="file" Margin="20,0,20,0">
<MenuItem Header="退出" Name="exit"></MenuItem>
</MenuItem>
<MenuItem Header="操作" Name="view" Margin="0,0,20,0"></MenuItem>
<MenuItem Header="帮助" Name="help" Margin="0,0,20,0"></MenuItem>
</Menu>
<my1:FileSelector Name="fileSelector1" Width="200" Height="300"/>
<StackPanel Name="inputArea" Margin="0,30,2,12" Background="Green">
</StackPanel>
</Grid>
</Window>
<Window x:Class="metadataTool.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:DevComponents.WpfEditors;assembly=DevComponents.WpfEditors"
Background="Chocolate" Title="元数据录入系统" Height="706" Width="1095" xmlns:my1="clr-namespace:FileSelectorControl;assembly=FileSelectorControl" xmlns:my2="clr-namespace:FileSelectorControl.Themes;assembly=FileSelectorControl">
<StackPanel Width="1009" Height="675">
<Menu Height="25" HorizontalAlignment="Left" Name="menu" VerticalAlignment="Top" Width="881" Margin="4,4,0,0">
<MenuItem Header="文件" Name="file" Margin="20,0,20,0">
<MenuItem Header="退出" Name="exit"></MenuItem>
</MenuItem>
<MenuItem Header="操作" Name="view" Margin="0,0,20,0"></MenuItem>
<MenuItem Header="帮助" Name="help" Margin="0,0,20,0"></MenuItem>
</Menu>
<StackPanel Name="inputArea" Margin="0,10,2,12" Background="Green">
</StackPanel>
<my1:FileSelector Name="fileSelector1" Height="177" />
</StackPanel>
</Window>