Wpf 使日期选择器在禁用时更易于读取
当禁用日期选择器时,文本将变灰,我希望内容更易于阅读 我在一些文本框上所做的是:Wpf 使日期选择器在禁用时更易于读取,wpf,xaml,Wpf,Xaml,当禁用日期选择器时,文本将变灰,我希望内容更易于阅读 我在一些文本框上所做的是: <Style TargetType="TextBox"> <Style.Triggers> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Foreground" Value="Black" />
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="Black" />
</Trigger>
</Style.Triggers>
</Style>
它确实使文本更容易阅读
我确实设法改变了数据采集器上的前景色,但它不起作用。文本仍然是灰色的
似乎我需要设置另一个属性,以使禁用的日期选择器的内容更易于阅读
那么,如何使禁用的DatePicker的内容更易于阅读?您可以通过添加名为Editable的bool DependencyProperty来扩展DatePicker。
我在下面找到了一个工作示例,请注意,我在.NET4中运行了这段代码 以下是DatePicker控件:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
namespace DatePickerStyle
{
public class ExtendedDatePicker : DatePicker
{
public static readonly DependencyProperty EditableProperty = DependencyProperty.Register("Editable", typeof(bool),
typeof(ExtendedDatePicker), new PropertyMetadata(true));
public bool Editable
{
get { return (bool)GetValue(EditableProperty); }
set { SetValue(EditableProperty, value); }
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
var textBox = GetTemplateChild("PART_TextBox") as DatePickerTextBox;
var binding = new Binding { Source = this, Path = new PropertyPath(ExtendedDatePicker.EditableProperty) };
textBox.SetBinding(UIElement.FocusableProperty, binding);
}
}
}
以下是XAML:
<Window x:Class="DatePickerStyle.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:DatePickerStyle="clr-namespace:DatePickerStyle"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<DatePicker IsEnabled="True" Grid.Row="0" SelectedDate="2002/12/31"/>
<DatePicker IsEnabled="False" Grid.Row="1" SelectedDate="2002/12/31"/>
<DatePickerStyle:ExtendedDatePicker Editable="True" Grid.Row="2" SelectedDate="2002/12/31"/>
<DatePickerStyle:ExtendedDatePicker Editable="False" Grid.Row="3" SelectedDate="2002/12/31"/>
</Grid>
</Window>
上面的代码w ExtendedDatePicker起作用,首先我认为它不起作用,但那是因为下拉列表仍然可以更改文本,而Editable=“False”对下拉列表不起作用 因此,不要忘记将以下内容添加到ExtendedDatePicker
Editable="False" AllowDrop="False" IsDropDownOpen="False" IsHitTestVisible="False" IsManipulationEnabled="False"
我的建议是这种更简单、通用的方法
<ControlTemplate x:Key="MyDisabledDatePicker">
<Border BorderBrush="Black" BorderThickness="1">
<TextBlock
Text="{Binding Path=SelectedDate, StringFormat={}{0:d}, RelativeSource={RelativeSource TemplatedParent}}"
VerticalAlignment="Center" HorizontalAlignment="Left" Padding="10,0,0,0"/>
</Border>
</ControlTemplate>
<Style TargetType="{x:Type DatePicker}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}}" Value="false">
<Setter Property="Template" Value="{StaticResource MyDisabledDatePicker}" />
</DataTrigger>
</Style.Triggers>
</Style>
普雷斯托 恐怕您必须访问模板。这可能会导致同样严重的错误。如果将isenabled绑定到viewmodel,例如,在save命令中,将isenabled更改为false,然后返回true。单击datepicker弹出窗口时出现错误。