2016-09-09 2 views
0

Мы используем Extended WPF Toolkit для реализации PropertyGrid.Как использовать средство выбора даты в Xceed PropertyGrid?

Элемент управления выбора даты по умолчанию, похоже, не является WPF DatePicker, но вместо этого является настраиваемым элементом управления, если я не ошибаюсь.

Обычно мы используем элементы управления DatePicker, чтобы выбрать даты. Можно ли использовать их и для управления PropertyGrid? Нам нужно это, чтобы обеспечить согласованный формат даты dd.MM.yyyy, и поскольку это свойство является датой, время также не должно отображаться.

Можно ли это сделать, используя Xceed Property Grid?

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

datepicker

+0

К сожалению, я не могу понять: вы хотите использовать как 'DatePicker' ** и ** настраиваемый элемент управления по умолчанию или просто 'DatePicker' (вместо настраиваемого элемента управления по умолчанию)? –

+0

Я не совсем уверен, как осуществляется управление. Но в конце концов, мне нужно, чтобы поле даты «PropertyGrid» было датировано без времени и 'dd.MM.yyyy' в качестве формата. Как и элемент управления DatePicker. Если Xceed использует настраиваемый элемент управления, он является вторичным, если это правильный формат. – bytecode77

ответ

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 в качестве редактора по умолчанию для свойства объекта (что в нашем примере называется «Дата»):

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

Я надеюсь, что это помогает.

+0

Спасибо за ваш ответ, Vic. Я попробую это, когда вернусь на работу в понедельник :) – bytecode77

+0

И это просто работает :) Большое спасибо! – bytecode77

+0

@ bytecode77, добро пожаловать, помощник –

0

Вы также можете использовать XAML только решение с помощью редактора шаблонов, показанных на «пользовательских редакторов с DataTemplates»:

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"

+0

Это не работает с DateTime? (то есть с нулевым значением DateTime) – brianestey

Смежные вопросы