触发内部/附属属性

时间:2012-08-21 09:34:08

标签: wpf xaml triggers

触发内部属性

<Button BorderBrush="Black" BorderThickness="2" x:Name="TimeButton" ClickMode="Press" Click="SetTime_Click" Height="26" HorizontalAlignment="Left" Margin="15, 0, 0, 0" Style="{StaticResource ImageButtonStyle}" ToolTip="Set Time" Width="26">
    <Button.Background>
        <ImageBrush x:Name="TimeImageBrush" ImageSource="/YCS;component/Images/Clock.png" Stretch="Uniform" TileMode="None" />                                        
    </Button.Background>  
</Button>

我需要创建一个触发器,将Button.Background属性中的ImageBrush根据名为HasHours的布尔值设置为不同的,我可以从我的itemssource轻松绑定,任何人都知道如何实现这一点,我找不到链接到此属性的任何示例....

我试过这样的事情

<Button.Triggers>
    <DataTrigger Binding="{Binding HasHours}" Value="false">
        <Setter TargetName="TimeImageBrush" Property="ImageSource" Value="/YCS;component/Images/ClockRed.png"/>
    </DataTrigger>
</Button.Triggers>

但它给了我这个错误:

在“ContentPresenter”类型上找不到静态成员“ImageSourceProperty”。

非常感谢任何帮助

2 个答案:

答案 0 :(得分:1)

这可能不是你问题的答案。

首先,我猜你将无法向Triggers集合添加DataTrigger,因为它只支持EventTriggers。

但是,您可以在Button的样式中定义DataTrigger。在这里,不要设置ImageBrush的ImageSource属性,只需将新的ImageBrush设置为Background。

<Button ...>
    <Button.Style>
        <Style TargetType="Button">
            <Style.Triggers>
                <DataTrigger Binding="{Binding HasHours}" Value="False">
                    <Setter Property="Background">
                        <Setter.Value>
                            <ImageBrush ImageSource="/YCS;component/Images/ClockRed.png"/>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>                    
        </Style>
    </Button.Style>
</Button>

答案 1 :(得分:0)

  1. 将图片设为内容,而不是背景,因为您没有内容。
  2. 将DataTrigger放在图像的触发器中,而不是按钮的触发器中。 您将不得不寻找触发器的DataContext:
    如下所示:

    <Button ... >  
      <Image ... >  
        <Image.Triggers>  
           <DataTrigger   
               Binding="{Binding Path= HasHours, RelativeSource={RelativeSource FindAncestor,  
                        AncestorType={x:Type Button}}}"   
                        Value="false" >  
               <Setter Property="ImageSource" Value="/YCS;component/Images/ClockRed.png"/>
          </DataTrigger>
        </Image.Triggers>
       </Image>
      </Button>