Как я могу препятствовать тому, чтобы ToggleButton был Переключен без установки IsEnabled

У меня есть список ToggleButtons, используемого в качестве ItemTemplate в ListBox, подобном этому ответу с помощью режима MultiSelect Поля списка. Однако я должен удостовериться, что по крайней мере один объект всегда выбирается.

Я могу получить правильное поведение от ListBox, просто добавив объект назад в набор SelectedItems ListBox на ListBox. Событие SelectionChanged, но мой ToggleButton все еще перемещается из его переключенного состояния, таким образом, я думаю, что должен остановить его ранее в процессе.

Я хотел бы сделать это без установки IsEnabled = "Ложь" на последней кнопке Selected, потому что я предпочту оставаться с Включенным визуальным стилем, не имея необходимость восстанавливать мои шаблоны кнопки. Какие-либо идеи?

9
задан Community 23 May 2017 в 12:34
поделиться

2 ответа

Вы можете переопределить метод 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));
}
32
ответ дан 4 December 2019 в 06:29
поделиться

Это халтура, но если вам не нужен пользовательский код, вы всегда можете использовать свойство "IsHitTestVisible", когда вы не хотите, чтобы они снимали флажок, просто установите IsHitTestVisible равным false. Тем не менее, они могут иметь возможность перейти к элементу управления и переключить его с помощью пробела.

1
ответ дан 4 December 2019 в 06:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: