0

触发内部属性

<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>

我需要创建一个触发器,根据名为 HasHours 的布尔值将 Button.Background 属性中的 ImageBrush 设置为不同的值,我可以从我的 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”。

任何帮助深表感谢

4

2 回答 2

1

这可能不完全是您问题的答案。

首先,我猜您将无法将 DataTrigger 添加到Triggers集合中,因为它仅支持 EventTriggers。

但是,您可以在按钮的样式中定义 DataTrigger。在这里,无需设置 ImageBrush 的 ImageSource 属性,只需将新的 ImageBrush 设置为背景。

<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>
于 2012-08-21T09:54:47.197 回答
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> 
    
于 2012-08-21T10:23:03.360 回答