12

リストボックスのMultiSelectモードを使用したこの回答と同様に、リストボックスのItemTemplateとして使用されているToggleButtonのリストがあります。ただし、少なくとも1つのアイテムが常に選択されていることを確認する必要があります。

ListBox.SelectionChangedイベントのListBoxのSelectedItemsコレクションにアイテムを追加するだけで、ListBoxから適切な動作を取得できますが、ToggleButtonはまだ切り替え状態から移動するため、プロセスの早い段階で停止する必要があると思います。

ボタンテンプレートをやり直すことなく、有効な視覚スタイルを維持したいので、最後に選択したボタンにIsEnabled="False"を設定せずに実行したいと思います。何か案は?

4

5 に答える 5

34

基本実装を呼び出さないことで、メソッドをオーバーライドしOnToggleて状態の切り替えを防ぐことができます。

public class LockableToggleButton : ToggleButton
{
    protected override void OnToggle()
    {
        if (!LockToggle)
        {
            base.OnToggle();
        }
    }

    public bool LockToggle
    {
        get { return (bool)GetValue(LockToggleProperty); }
        set { SetValue(LockToggleProperty, value); }
    }

    // Using a DependencyProperty as the backing store for LockToggle.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty LockToggleProperty =
        DependencyProperty.Register("LockToggle", typeof(bool), typeof(LockableToggleButton), new UIPropertyMetadata(false));
}
于 2010-03-30T21:33:16.567 に答える
2

これはハッキーですが、カスタム コードが必要ない場合は常に "IsHitTestVisible" プロパティを使用できます。チェックを外したくない場合は、IsHitTestVisible を false に設定するだけです。ただし、タブでコントロールに移動し、スペース バーを使用して切り替えることができる場合があります。

于 2010-06-15T19:15:35.220 に答える