【问题标题】:Changing Button image when IsEnabledIsEnabled 时更改按钮图像
【发布时间】:2011-12-09 10:46:18
【问题描述】:

我想在按钮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>

【问题讨论】:

    标签: wpf image button isenabled


    【解决方案1】:

    试试下面的

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

    【讨论】:

    • 我测试了这两种方法。检查您的绑定。
    • 绑定很好,即使我设置了 True/False 它也不起作用。
    • 您是否跟踪 IsEnabled 并验证是否正在调用 get?
    • 我直接设置为TRUE/FALSE(省略绑定)
    • @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”中的设置器指定“TargetName”属性

    【讨论】:

      【解决方案3】:

      解决方法是在您的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}"/>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-21
        • 2014-11-10
        • 2015-10-04
        • 1970-01-01
        • 1970-01-01
        • 2020-02-28
        • 1970-01-01
        • 2013-06-06
        相关资源
        最近更新 更多