using Microsoft.Win32; namespace WPFluent.Controls; public class ChooseBox : TextBox { private Button PART_ChooseButton; static ChooseBox() { DefaultStyleKeyProperty.OverrideMetadata(typeof(ChooseBox), new FrameworkPropertyMetadata(typeof(ChooseBox))); } #region Event Implement Function private void PART_ChooseButton_Click(object sender, RoutedEventArgs e) { switch(ChooseBoxType) { case ChooseBoxType.SingleFile: OpenFileDialog openFileDialog = new() { Multiselect = false, //"文本文件|*.*|C#文件|*.cs|所有文件|*.*" Filter = Filter }; if(openFileDialog.ShowDialog() == true) this.Text = openFileDialog.FileName; break; case ChooseBoxType.MultiFile: break; case ChooseBoxType.Folder: var folderDialog = new VistaFolderBrowserDialog(); if(folderDialog.ShowDialog() == true) this.Text = folderDialog.SelectedPath; break; case ChooseBoxType.SaveFile: var fileDialog = new SaveFileDialog { Filter = Filter, //设置文件类型 FileName = DefaultFileName, //设置默认文件名 DefaultExt = DefaultExt, //设置默认格式(可以不设) AddExtension = true //设置自动在文件名中添加扩展名 }; if(fileDialog.ShowDialog() == true) this.Text = fileDialog.FileName; break; } } #endregion #region Override public override void OnApplyTemplate() { base.OnApplyTemplate(); PART_ChooseButton = this.GetTemplateChild("PART_ChooseButton") as Button; if(PART_ChooseButton != null) { PART_ChooseButton.Click += PART_ChooseButton_Click; } } #endregion #region ChooseButtonStyle /// /// 获取或者设置选择按钮的样式 /// public Style ChooseButtonStyle { get { return (Style)GetValue(ChooseButtonStyleProperty); } set { SetValue(ChooseButtonStyleProperty, value); } } public static readonly DependencyProperty ChooseButtonStyleProperty = DependencyProperty.Register( nameof(ChooseButtonStyle), typeof(Style), typeof(ChooseBox)); #endregion #region ChooseBoxType public ChooseBoxType ChooseBoxType { get { return (ChooseBoxType)GetValue(ChooseBoxTypeProperty); } set { SetValue(ChooseBoxTypeProperty, value); } } public static readonly DependencyProperty ChooseBoxTypeProperty = DependencyProperty.Register( nameof(ChooseBoxType), typeof(ChooseBoxType), typeof(ChooseBox), new PropertyMetadata(ChooseBoxType.SingleFile)); #endregion #region ChooseButtonWidth public double ChooseButtonWidth { get { return (double)GetValue(ChooseButtonWidthProperty); } set { SetValue(ChooseButtonWidthProperty, value); } } public static readonly DependencyProperty ChooseButtonWidthProperty = DependencyProperty.Register( nameof(ChooseButtonWidth), typeof(double), typeof(ChooseBox), new PropertyMetadata(20d)); #endregion #region ChooseBoxFilter public string Filter { get { return (string)GetValue(FilterProperty); } set { SetValue(FilterProperty, value); } } public static readonly DependencyProperty FilterProperty = DependencyProperty.Register( nameof(Filter), typeof(string), typeof(ChooseBox), new PropertyMetadata("文本文件|*.*")); #endregion #region DefaultFileName public string DefaultFileName { get { return (string)GetValue(DefaultFileNameProperty); } set { SetValue(DefaultFileNameProperty, value); } } public static readonly DependencyProperty DefaultFileNameProperty = DependencyProperty.Register( nameof(DefaultFileName), typeof(string), typeof(ChooseBox), new PropertyMetadata("文件")); #endregion #region DefaultExt public string DefaultExt { get { return (string)GetValue(DefaultExtProperty); } set { SetValue(DefaultExtProperty, value); } } public static readonly DependencyProperty DefaultExtProperty = DependencyProperty.Register( nameof(DefaultExt), typeof(string), typeof(ChooseBox), new PropertyMetadata(string.Empty)); #endregion }