这里的第一个问题。无论如何,这里是:
我有一个带有很多DatePicker控件的XAML Windows(来自CodePlex上的WPFToolkit的DatePicker)。每个DatePicker的默认值为1/1/1990,如果没有选择其他日期,我希望(或者更确切地说是我的老板:-))以灰色斜体显示文本而不是黑色。因此,它可以很容易地查看尚未输入日期的字段。
这可能很简单,但我对WPF / XAML很新。事实上,这些是我使用它的第一步。
所以这就是我所拥有的,实际上很有效:
<Style TargetType="{x:Type my:DatePicker}">
<Style.Triggers>
<Trigger Property="Text" Value="1/1/1990">
<Setter Property="Foreground" Value="DarkGray"/>
<Setter Property="ToolTip" Value="Please select a date"/>
<Setter Property="FontStyle" Value="Italic"/>
</Trigger>
</Style.Triggers>
</Style>
问题是,由于本地化/区域设置问题,它在每台机器上都不起作用。
所以我尝试了这个:
<Style TargetType="{x:Type my:DatePicker}">
<Style.Triggers>
<Trigger Property="Text" Value="{Binding Source={x:Static p:Settings.Default}, Path=MinDate, Mode=TwoWay}">
<Setter Property="Foreground" Value="DarkGray"/>
<Setter Property="ToolTip" Value="Veuillez choisir une date"/>
<Setter Property="FontStyle" Value="Italic"/>
</Trigger>
</Style.Triggers>
</Style>
注意触发器的“Value”属性的区别。这会产生以下错误:
无法设置'绑定' '触发'类型的'价值'属性。一个 '绑定'只能在a上设置 DependencyProperty的一个 的DependencyObject。
我理解其中的含义,并且我理解为什么这不起作用。 (注意,MinDate的类型为DateTime,值为1/1/1990)
那么,我怎样才能从所有计算机上的第一个代码片段中获得结果呢?
感谢您的时间。
答案 0 :(得分:2)
好的,对于碰巧遇到同样问题的人来说,这就是我最终做的事情:
在XAML中:
<src:ConvertMinDate x:Key="ConvertMinDate"/>
<Style TargetType="{x:Type my:DatePicker}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=SelectedDate, RelativeSource={RelativeSource Self},
Converter={StaticResource ConvertMinDate}}" Value="True">
<Setter Property="Foreground" Value="DarkGray"/>
<Setter Property="ToolTip" Value="Select a date"/>
<Setter Property="FontStyle" Value="Italic"/>
</DataTrigger>
</Style.Triggers>
</Style>
在codebehind中:
public class ConvertMinDate : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
{
return true;
}
else
{
DateTime date = Peche.Properties.Settings.Default.MinDate;
if (value is DateTime)
{
date = (DateTime)value;
return date == Peche.Properties.Settings.Default.MinDate;
}
else
{
return true;
}
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
MinDate已于1990年1月1日在我项目的“设置”部分设置。
现在,如果SelectedDate为null或等于MinDate,则转换后返回true,从而触发DataTrigger并更改样式,如果是DatePickerTextBox。
WPF不是很棒吗? : - )
答案 1 :(得分:0)