按钮被禁用时如何更改图像?

时间:2010-05-14 01:41:22

标签: wpf image button

当按钮被禁用时,我正试图显示不同的图像;我认为使用触发器会很容易。

然而,当按钮被禁用时,我无法让图像源切换到禁用的图像。我已经尝试在图像和按钮上设置触发器。我的下面有什么问题?如何在启用/禁用按钮时更改图像源?

<Button
         x:Name="btnName"
         Command="{Binding Path=Operation}"
         CommandParameter="{x:Static vm:Ops.OpA}">
            <Button.Content>
                <StackPanel>
                    <Image
                  Width="24"
                  Height="24"             
                  RenderOptions.BitmapScalingMode="NearestNeighbor"
                  SnapsToDevicePixels="True"
                  Source="/MyAssembly;component/images/enabled.png">
                        <Image.Style>
                            <Style>
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding ElementName=btnName, Path=Button.IsEnabled}" Value="False">
                                        <Setter Property="Image.Source" Value="/MyAssembly;component/images/disabled.png" />
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>
                        </Image.Style>
                    </Image>
                </StackPanel>
            </Button.Content>
        </Button>

1 个答案:

答案 0 :(得分:23)

是的,这个弹出了很多。

无法在样式中更改在对象声明中显式设置的任何属性。因此,您在图像声明中设置了图像的Source属性,样式的Setter将不会触及它。

请改为尝试:

<Image
    Width="24"  
    Height="24"               
    RenderOptions.BitmapScalingMode="NearestNeighbor"  
    SnapsToDevicePixels="True"
    >
    <Image.Style>
        <Style TargetType="Image">
            <Setter Property="Source"
                    Value="/MyAssembly;component/images/enabled.png" />
            <Style.Triggers>
                ... your trigger and setter ...
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>