1

我们正在使用扩展的 WPF 工具包来实现PropertyGrid.

如果我没记错的话,默认的日期选择控件似乎不是 WPF DatePicker,而是自定义控件。

通常,我们使用DatePicker控件来选择日期。是否也可以将它们用于PropertyGrid控制?我们需要它以提供一致的日期格式,dd.MM.yyyy并且由于此属性是日期,因此也不应显示时间。

这可以使用 Xceed 属性网格来完成吗?

[Category("General")]
[DisplayName("Date")]
[PropertyOrder(2)]
public DateTime? Date { get; set; }

日期选择器

4

2 回答 2

2

您所要求的并不难实现:XceedPropertyGrid是高度可定制的,并且可以使用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对象属性设置为默认编辑器(在我们的示例中称为“日期”):

[Category("General")]
[DisplayName("Date")]
[PropertyOrder(2)]
[Editor(typeof(DateTimePickerEditor), typeof(DateTimePicker))]
public Nullable<DateTime> Date

我希望它有所帮助。

于 2016-09-09T16:08:02.667 回答
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>

定义了命名空间 sysxmlns:sys="clr-namespace:System;assembly=mscorlib"

于 2017-01-02T08:24:02.940 回答