我有自己的自定义控件,其依赖属性名为Maximum(double),我为此自定义控件定义了自己的样式。在自定义控件样式中设置为Maximum(50)。在应用程序中,我有一个视图模型,其属性为Maximum(double?)。
<Style x:Key="MyCustomControlDefaultStyle" TargetType="controls:MyControl">
<Setter Property="Maximum" Value="50" />
</Style>
<controls:MyControl Maximum="{Binding Maximum}"
Style="{StaticResource MyCustomControlDefaultStyle}"
/>
如果视图模型中的最大值为null,我想wpf自动使用MyCustomControlDefaultStyle中定义的默认值。可能吗? 感谢您的建议
答案 0 :(得分:2)
现在无法检查,但是你可以将DefaultValue放在一个静态属性中,然后从样式和具体Binding中的Fallbackvalue / TargetNullValue引用这个值,如:
<Setter Property="Maximum" Value="{x:Static ns:MyStaticClass.MyStaticProp}" />
在Binding中如:
<controls:MyControl Maximum="{Binding Maximum, FallBackValue={x:Static ns:MyStaticClass.MyStaticProp}"
Style="{StaticResource MyCustomControlDefaultStyle}" />
不确定它是否适用于FallBackValue。我稍后会检查......:)
答案 1 :(得分:0)
您可以在自己的风格中使用DataTrigger
以及Converter
:
<Style.Triggers>
<DataTrigger Binding="{Binding Maximum, Converter={StaticResource NullToBooleanConverter}}" Value="False">
<Setter Property="Text" Value="{Binding Maximum}" />
</DataTrigger>
</Style.Triggers>
转换器可能如下所示:
class NullToBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return value == null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
编辑:无法管理语法高亮显示...