6

Wordの左/中央/右揃えのツールバーボタンを複製しようとしています。「左揃え」ボタンをクリックすると、中央ボタンと右ボタンのチェックが外れます。ToggleButtonsでWPFリストボックスを使用しています。

問題は、ユーザーが[左揃え]ボタンを2回クリックできることです。2回目のクリックにより、ボタンのチェックが外され、基になる値がnullに設定されます。2回目のクリックで何もしないでください。

アイデア?ListBoxに常に1つの選択されたアイテムがあるように強制しますか?ビューモデルでnullを防止しますか(ToggleButtonバインディングを更新する必要があります)?

    <ListBox ItemsSource="{x:Static domain:FieldAlignment.All}" SelectedValue="{Binding Focused.FieldAlignment}">
      <ListBox.ItemTemplate>
        <DataTemplate>
          <ToggleButton IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}">
            <TextBlock Text="{Binding Description}" />
          </ToggleButton>
        </DataTemplate>
      </ListBox.ItemTemplate>
    </ListBox>
4

3 に答える 3

4

ええ、私はこの場合もラジオボタンを好みますが、トグルボタンを使用したい場合は、isenabledプロパティをischeckedにバインドして、チェックされたときにclikedできないようにすることができます

于 2010-07-29T06:53:47.007 に答える
2

ToggleButtonからカスタムコントロールを作成し、*。xaml.csファイルで、コントロールを宣言および定義します

    public class ToggleButton2 : ToggleButton
{
    public bool IsNotCheckable
    {
        get { return (bool)GetValue(IsNotCheckableProperty); }
        set { SetValue(IsNotCheckableProperty, value); }
    }

    // Using a DependencyProperty as the backing store for IsNotCheckable.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty IsNotCheckableProperty =
        DependencyProperty.Register("IsNotCheckable", typeof(bool), typeof(ToggleButton2), new FrameworkPropertyMetadata((object)false));

    protected override void OnToggle()
    {
        if(!IsNotCheckable)
        {
            base.OnToggle();
        }
    }
}

* .xamlで、ToggleButtonをmy:ToggleButton2に置き換えます。次に、以下のように、IsNotCheckableをIsCheckedにバインドできます。

              <my:ToggleButton2 IsChecked="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBoxItem}},Path=IsSelected}"  IsNotCheckable="{Binding RelativeSource={RelativeSource Self}, Path=IsChecked, Mode=OneWay}">           
于 2011-08-07T12:46:51.633 に答える
1

これをToggleButtonsとして実装するのではなく、カスタムテンプレートでRadioButtonsを使用します。それはおそらくあなたに多くの頭痛を救うでしょう。

于 2010-07-28T19:38:39.763 に答える