Хотите хорошие или плохие новости?
Хорошей новостью является то, что Microsoft говорит, что эта проблема была исправлена в выпуске WPFToolkit в феврале 2010 года. И это имеет.
Плохая новость заключается в том, что, хотя для параметра IsEnabled DatePicker's установлено значение «True» будет включать DatePicker, поэтому вы можете теперь нажать на кнопку «Календарь», чтобы выбрать дату, он все равно будет выглядеть отключенным.
"Жук"? Я сказал слово «жук»?
Конечно, нет.
Вы можете обойти эту проблему, применив <Style>
.
Ниже приведен простой код xaml для демонстрации.
Отображает две строки, каждая из которых содержит CheckBox и DatePicker.
Когда вы щелкаете CheckBox в строке, он должен включить DatePicker в этой строке.
Показывает разницу между DatePicker без стиля (в первой строке) и DatePicker со стилем (во второй строке).
![alt text](https://i.stack.imgur.com/rqYkh.jpg)
Оба DatePickers do включаются / отключаются правильно, но тот, что в первой строке, никогда не выглядит так, как он есть. DatePicker во второй строке использует Style
, чтобы показать пользователю, когда он отключен.
Обратите внимание, как этот код устанавливает фон для элемента управления DatePicker
и его части DatePickerTextBox
.
<Window x:Class="WPFDatePickerTest.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wpf="clr-namespace:Microsoft.Windows.Controls;assembly=WPFToolkit"
xmlns:primitives="clr-namespace:Microsoft.Windows.Controls.Primitives;assembly=WPFToolkit"
Title="Window1" Height="317" Width="461">
<Window.Resources>
<Style TargetType="{x:Type primitives:DatePickerTextBox}">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="Transparent"/>
</Trigger>
</Style.Triggers>
</Style>
<Style x:Key="DatePickerStyle1" TargetType="{x:Type wpf:DatePicker}">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{x:Static SystemColors.InactiveBorderBrush}"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid>
<StackPanel>
<WrapPanel>
<CheckBox Height="16" Name="cbDateOfJoining" Width="120">Date of joining</CheckBox>
<wpf:DatePicker Height="25"
Name="datePicker1"
Width="140"
IsEnabled="{Binding IsChecked, ElementName=cbDateOfJoining}" />
</WrapPanel>
<WrapPanel>
<CheckBox Height="16" Name="cbDateOfLeaving" Width="120">Date of leaving</CheckBox>
<wpf:DatePicker Height="25"
Name="datePicker2"
Width="140"
IsEnabled="{Binding IsChecked, ElementName=cbDateOfLeaving}"
Style="{DynamicResource DatePickerStyle1}" />
</WrapPanel>
</StackPanel>
</Grid>
</Window>
Надеюсь, что поможет!
И я надеюсь, что правильно исправлено в следующем выпуске WPFtoolkit. Пользователи жалуются на эту проблему с 2009 года ...