你想要好消息还是坏消息?
好消息是微软表示这个问题已经在 2010 年 2 月发布的 WPFToolkit 中得到修复。它有。
坏消息是,虽然将 DatePicker 的 IsEnabled 值设置为“True”会启用 DatePicker,因此您现在可以单击日历按钮来选择日期,但它看起来仍然是禁用的。
“漏洞” ?我说“虫”字了吗?
当然不是。
你可以通过应用一个<Style>
虽然来解决这个问题。
下面是一些简单的 xaml 代码来演示。
它显示两行,每行包含一个 CheckBox 和一个 DatePicker。当您单击一行中的复选框时,它应该启用该行中的 DatePicker。
这显示了不带样式的 DatePicker(第一行)和带样式的 DatePicker(第二行)之间的区别。
两个 DatePickers都可以正确启用/禁用,但第一行中的那个永远不会看起来像。第二行中的 DatePicker 使用 aStyle
在禁用时向用户显示。
请注意此代码如何设置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 年以来,用户一直在抱怨这个问题......