0

实现状态为的三态按钮的惯用(最好是最简单的)方法是什么:

  • 默认
  • 紧迫
  • 禁用

到目前为止,我有这个:

<Button ToolTip="Back" FontWeight="Bold" Command="{Binding Path=Navigator.GoBackCommand}" IsEnabled="{Binding Path=Navigator.CanGoBack}">
  <Viewbox Width="10">
    <ContentControl Content="{StaticResource ResourceKey=CoolLeftArrow}"/>
  </Viewbox>
</Button>

是否需要更换控制模板才能获得这种行为,或者可以使用触发器获得吗?理想情况下,我只想指定 3 个不同的资源并将它们绑定到相关属性。

编辑:将名称“按下”状态更新为“按下”以避免与可能的类似复选框的行为混淆。

4

1 回答 1

8

为什么不使用IsThreeState设置为的 ToggleButton true

<ToggleButton IsThreeState="True">
    <ToggleButton.Style>
        <Style TargetType="ToggleButton">
            <Style.Triggers>
                <Trigger Property="IsChecked" Value="True">
                    <Setter Property="Content" Value="{StaticResource TbCheckedContent}"/>
                </Trigger>
                <Trigger Property="IsChecked" Value="False">
                    <Setter Property="Content" Value="{StaticResource TbUncheckedContent}"/>
                </Trigger>
                <Trigger Property="IsChecked" Value="{x:Null}">
                    <Setter Property="Content" Value="{StaticResource TbNullContent}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </ToggleButton.Style>
</ToggleButton>

更新我想我没有仔细阅读你的问题。您当然可以对按钮IsPressedIsEnabled属性执行与上述类似的操作:

<Button>
    <Button.Style>
        <Style TargetType="Button">
            <Style.Triggers>
                <Trigger Property="IsPressed" Value="True">
                    <Setter Property="Content" Value="{StaticResource ButtonPressedContent}"/>
                </Trigger>
                <Trigger Property="IsPressed" Value="False">
                    <Setter Property="Content" Value="{StaticResource ButtonNormalContent}"/>
                </Trigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Content" Value="{StaticResource ButtonDisabledContent}"/>
                </Trigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

但是,您可以查看VisualStates,然后查看按钮样式和模板,以了解如何在按钮的 ControlTemplate 中可视化这些状态。

于 2013-03-08T19:23:05.110 回答