当IsEnabled改变时更改按钮的图片

6

IsEnabled == False时,我希望改变按钮的图片。

以下是我的例子,绑定已经正确,但是当我将它们更改为False/True时仍然无法工作。

<Button x:Name="btnBackward" Grid.Column="0" Grid.Row="2" Command="{Binding UserWorkflowManager.NavigateBackward}" IsEnabled="{Binding UserWorkflowManager.NavigateBackwardEnable}" Grid.RowSpan="2">
    <Button.Template>
        <ControlTemplate>
            <Image Name="_image" HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Uniform">
                <Image.Style>
                    <Style TargetType="Image">
                        <Setter Property="Source" Value="/UserWorkflow.View;component/Images/LDC500_butX_PreviousPane_norm.bmp" />
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding ElementName=btnBackward, Path=IsEnabled}" Value="False">
                                    <Setter Property="Source" Value="/UserWorkflow.View;component/Images/LDC500_butX_PreviousPane_dis.bmp"/>
                                </DataTrigger>
                            </Style.Triggers>
                    </Style>
                </Image.Style>
            </Image>
        </ControlTemplate>
    </Button.Template>
</Button>
3个回答

7
请尝试以下操作:
<Style.Triggers>
    <DataTrigger Binding="{Binding IsEnabled,RelativeSource={RelativeSource AncestorType=Button}}" Value="False">
        <Setter Property="Source" Value="/UserWorkflow.View;component/Images/LDC500_butX_PreviousPane_dis.bmp"/>
    </DataTrigger>
</Style.Triggers>

或者直接在控件模板中添加触发器,如下所示。

            <ControlTemplate>
                <Image Name="_image" HorizontalAlignment="Center">
                 ..........
                </Image>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter TargetName="_image" Property="Source" Value="/UserWorkflow.View;component/Images/LDC500_butX_PreviousPane_dis.bmp" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>

我测试了两种方法。请检查您的绑定。 - Muhammad Hasan Khan
绑定没问题,即使我设置为True/False也不起作用。 - Paweł Smejda
你是否追踪了IsEnabled并验证了get是否被调用? - paparazzo
我直接将其设置为TRUE/FALSE(省略绑定) - Paweł Smejda
@PawełSmejda请将您的代码发布在某个地方,并在此处发布链接。我的答案和您的实现之间必须有一些差异。 - Muhammad Hasan Khan
当我准备好项目并将其提取到新项目中时,它可以正常工作。所以谢谢,我会找出问题所在。 - Paweł Smejda

2

试试这个:

<Button x:Name="btnBackward" Grid.Column="0" Click="btnBackward_Click">
        <Button.Template>
            <ControlTemplate>
                <Image Name="_image" HorizontalAlignment="Center" VerticalAlignment="Center" Stretch="Uniform">
                    <Image.Style>
                        <Style TargetType="Image">
                            <Setter Property="Source" Value="/Images/0.png" />
                        </Style>
                    </Image.Style>
                </Image>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Source" Value="/Images/1.png" TargetName="_image"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>

        </Button.Template>
    </Button>

在“ControlTemplate.Triggers”中的setter中,应指定“TargetName”属性。


0
解决方案是在你的 DataTrigger 中使用 RelativeSource={RelativeSource Self}}。
<DataTrigger
  Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Self}}"
  Value="False">

示例

添加此样式:

<Style x:Key="MainButtonStyle" TargetType="Button" BasedOn="{StaticResource ChromelessButtonStyle}">
    <Setter Property="Foreground" Value="Black" />
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=IsEnabled,  RelativeSource={RelativeSource Self}}" Value="True">
            <Setter Property="Background" Value="Green" />
        </DataTrigger>
        <DataTrigger Binding="{Binding Path=IsEnabled,  RelativeSource={RelativeSource Self}}" Value="False">
            <Setter Property="Background" Value="Blue" />
        </DataTrigger>
    </Style.Triggers>
</Style>

然后将此样式应用于按钮:
<Button x:Name="ActionButton" Style="{StaticResource MainButtonStyle}" Command="{Binding MyCmd}" IsEnabled="{Binding ActionButtonEnabled}"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接