0

状態が次のような 3 状態のボタンを実装する慣用的な (そしてできれば最も簡単な) 方法は何ですか?

  • デフォルト
  • 押す
  • 無効

これまでのところ、私はこれを持っています:

<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

ToggleButtonをにIsThreeState設定して使用してみません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>

更新私はあなたの質問を十分に注意深く読んでいないと思います。IsPressedもちろん、ボタンとIsEnabledプロパティについて上記と同様のことを行うことができます。

<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 に答える