2009-07-07 30 views
22

我想要做这样的事更大:WPF触发当属性值超过一定量

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

无论如何做这样的事情?

回答

17

您需要一个自定义转换器。看看article

1

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

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

4

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

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

我喜欢使用转换器甚至与结合的数据的想法。当使用MVVM模式时,它有助于将视图代码保留在视图模型之外。 – 2010-03-18 14:35:44

29

您可以使用数据触发器并将绑定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> 

Reference

+3

+1用于指出使用ConverterParameter的isLessThanConverter方法。 – cplotts 2013-11-06 21:35:22