如何通过其父级IsChecked属性上的触发器设置图像效果?

时间:2014-04-23 13:43:51

标签: c# wpf xaml

在我看来,我有几个ToggleButtons。它们中的每一个都有一个具有不同源的Image作为其内容,并且其IsChecked属性绑定到我的视图模型中的属性。我想为每个按钮的Image添加/删除DropShadowEffect,具体取决于它的按钮是否为IsChecked。我可以在MyProperty1,MyProperty2等上使用DataTrigger为每个Image赋予自己的风格,但是我也可以为所有图像使用单一样式吗?

<ToggleButton IsChecked="{Binding MyProperty1}" >
    <Image Source="{Binding MyIcon1}">
        <Image.Effect>
            <DropShadowEffect Direction="-45" ShadowDepth="3" />
        </Image.Effect>
    </Image>
</ToggleButton>

<ToggleButton IsChecked="{Binding MyProperty2}" >
    <Image Source="{Binding MyIcon2}">
        <Image.Effect>
            <DropShadowEffect Direction="-45" ShadowDepth="3" />
        </Image.Effect>
    </Image>
</ToggleButton>

1 个答案:

答案 0 :(得分:1)

您可以为Image创建共同样式,并在DataTrigger属性上使用ToggleButton.IsChecked

<Window.Resources>
    <Style TargetType="{x:Type Image}" x:Key="imageButtonStyle">
        <Setter Property="Effect">
            <Setter.Value>
                <DropShadowEffect Direction="-45" ShadowDepth="3" />
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type ToggleButton}}, Path=IsChecked}" Value="True">
                <Setter Property="Effect" Value="{x:Null}"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<ToggleButton IsChecked="{Binding MyProperty2}" >
    <Image Source="{Binding MyIcon2}" Style="{StaticResource imageButtonStyle}"/>
</ToggleButton>