WPF在属性值大于某个量时触发

Mic*_*cah 26 wpf triggers

我想做这样的事情:

<ControlTemplate.Triggers>
    <Trigger Property="Width" Value=">25">
       <!-- Set values here -->
    </Trigger>
</ControlTemplate.Triggers>
Run Code Online (Sandbox Code Playgroud)

无论如何要做这样的事情?

Dan*_*iel 33

您可以使用数据触发器并将绑定RelativeSource设置为Self.数据触发器允许绑定和绑定让您拥有转换器.

例:

   <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>
Run Code Online (Sandbox Code Playgroud)

参考

  • 使用ConverterParameter指出isLessThanConverter方法的+1. (4认同)
  • 在Binding中,应该使用`ActualWidth`,因为如果没有明确设置,`Width`属性是'NaN`. (4认同)

Vas*_*nan 21

您需要一个自定义转换器.看看文章


Ser*_*hov 5

不是没有代码.通常的做法是:

  • 使用UI元素时,创建IValueConverter并使用转换器绑定到属性.
  • 处理绑定数据时,请在数据上创建bool属性并从该属性触发.

  • 我喜欢使用转换器的想法,即使是绑定数据。使用 MVVM 模式时,它有助于将视图代码保留在视图模型之外。 (2认同)

Ste*_*ins 2

SP1 中可能添加了一些内容,但我过去实现此目的的方法是使用 ValueConvertor 将值转换为布尔值。

在您的示例中,如果值 > 25,转换器将返回 true,否则返回 false。如果这没有意义,我可以举个例子:-)