我们正在使用Extended WPF Toolkit来实现PropertyGrid
。
默认日期选择控件似乎不是WPF DatePicker
,而是自定义控件,如果我没记错的话。
通常,我们使用DatePicker
控件来选择日期。对于PropertyGrid
控制,是否也可以使用它们?我们需要这样才能提供dd.MM.yyyy
的一致日期格式,因为此属性是日期,所以也不应显示时间。
可以使用Xceed Property Grid完成吗?
[Category("General")]
[DisplayName("Date")]
[PropertyOrder(2)]
public DateTime? Date { get; set; }
答案 0 :(得分:2)
您要求的内容并非难以实现:Xceed PropertyGrid
可自定义,并且可以使用ITypeEditor界面和Editor属性自定义属性编辑器。
首先,我们需要定义一个自定义编辑器控件:
public class DateTimePickerEditor : DateTimePicker, ITypeEditor
{
public DateTimePickerEditor()
{
Format = DateTimeFormat.Custom;
FormatString = "dd.MM.yyyy";
TimePickerVisibility = System.Windows.Visibility.Collapsed;
ShowButtonSpinner = false;
AutoCloseCalendar = true;
}
public FrameworkElement ResolveEditor(PropertyItem propertyItem)
{
Binding binding = new Binding("Value");
binding.Source = propertyItem;
binding.Mode = propertyItem.IsReadOnly ? BindingMode.OneWay : BindingMode.TwoWay;
BindingOperations.SetBinding(this, ValueProperty, binding);
return this;
}
}
构造函数中的所有内容都是为了获取特定行为(即没有时间控件,特定日期格式等)。
现在我们需要将DateTimePickerEditor
设置为object属性的默认编辑器(在我们的示例中称为" Date"):
[Category("General")]
[DisplayName("Date")]
[PropertyOrder(2)]
[Editor(typeof(DateTimePickerEditor), typeof(DateTimePicker))]
public Nullable<DateTime> Date
我希望它有所帮助。
答案 1 :(得分:0)
您还可以使用“使用DataTemplates自定义编辑器”中显示的编辑器模板来使用仅限XAML的解决方案:
https://wpftoolkit.codeplex.com/wikipage?title=PropertyGrid&referringTitle=Home
使用这种方法,您不会使用外部库的属性来混淆模型类。
您可以通过以下方式实现DateTime类型的格式化输入:
<xctk:PropertyGrid>
<xctk:PropertyGrid.EditorDefinitions>
<xctk:EditorTemplateDefinition>
<xctk:EditorTemplateDefinition.TargetProperties>
<xctk:TargetPropertyType Type="{x:Type sys:DateTime}" />
</xctk:EditorTemplateDefinition.TargetProperties>
<xctk:EditorTemplateDefinition.EditingTemplate>
<DataTemplate>
<xctk:DateTimePicker Value="{Binding Value}" Format="ShortDate" />
</DataTemplate>
</xctk:EditorTemplateDefinition.EditingTemplate>
</xctk:EditorTemplateDefinition>
</xctk:PropertyGrid.EditorDefitions>
</xctk:PropertyGrid>
使用命名空间sys定义xmlns:sys="clr-namespace:System;assembly=mscorlib"