当属性值大于一定值时的WPF触发器

31

我想做类似于这样的事情:

<ControlTemplate.Triggers>
    <Trigger Property="Width" Value=">25">
       <!-- Set values here -->
    </Trigger>
</ControlTemplate.Triggers>

有没有类似这样的方法?

4个回答

38

你可以使用数据触发器(data trigger),并将绑定的RelativeSource设置为Self。 Data Triggers允许绑定,而绑定则让你使用转换器(converters)。

例如:

   <Button Content="I change colour depending on my width for some reason">
        <Button.Triggers>
            <DataTrigger
                Binding="{Binding
                Path=Width,
                RelativeSource={RelativeSource Self},
                Converter={StaticResource isLessThanConverter},
                ConverterParameter=50}"
                Value="True">
                <Setter Property="Button.Background" Value="Red" />
            <DataTrigger>
        <Button.Triggers>
    <Button>

参考链接


4
感谢指出使用ConverterParameter的isLessThanConverter方法,点赞(+1)。 - cplotts
5
在Binding中应使用ActualWidth,因为如果未显式设置,Width属性将为NaN - pogosama
我遇到了一个运行时异常“_Triggers集合成员必须是EventTrigger类型_”。只有在样式或模板触发器中包装时才能正常工作。 - g t

6

不是没有代码后台。通常的做法是:

  • 当使用UI元素时,创建一个IValueConverter并使用转换器绑定到属性。
  • 当使用绑定数据时,在您的数据上创建一个bool属性并从该属性触发。

2
我喜欢即使使用绑定数据也使用转换器的想法。在使用MVVM模式时,它有助于将视图代码保持在视图模型之外。 - sourcenouveau

2

可能在SP1中已经添加了一些内容,但我过去实现这个功能的方式是使用ValueConvertor将值转换为布尔值。

在您的示例中,如果值大于25,则转换器将返回true,否则返回false。如果这不太清楚,我可以提供一个示例 :-)


0
Data Trigger仅验证确切值,不验证“计算得出的值”(如大于、小于、加法等)。你需要一个转换器来将其转换为确切值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接