Как получить группу переключающих кнопок, которые будут действовать как переключатели в WPF?

У меня есть группа кнопок, которые должны действовать как кнопки переключения, но также и как переключатели, в которых можно выбрать или нажать только одну кнопку в текущее время. Он также должен иметь состояние, при котором ни одна из кнопок не будет выбрана / нажата.

Поведение будет похоже на панель инструментов Photoshop, где в любой момент будут выбраны нуль или один из инструментов!

Любая идея, как это можно реализовать в WPF?

Самый простой способ – создать стиль ListBox для использования ToggleButtons для ItemTemplate

 

Затем вы можете использовать свойство SelectionMode ListBox для обработки SingleSelect vs MultiSelect.

На мой взгляд, это самый простой способ.

  

Наслаждайтесь! – Приколы

        

это работает для меня, наслаждайтесь!

вы всегда можете использовать общее событие в щелчке ToggleButton, которое устанавливает все ToggleButton.IsChecked в групповом управлении (Grid, WrapPanel, …) в false с помощью VisualTreeHelper; затем перепроверить отправителя. Или что-то в подобном.

 private void ToggleButton_Click(object sender, RoutedEventArgs e) { int childAmount = VisualTreeHelper.GetChildrenCount((sender as ToggleButton).Parent); ToggleButton tb; for (int i = 0; i < childAmount; i++) { tb = null; tb = VisualTreeHelper.GetChild((sender as ToggleButton).Parent, i) as ToggleButton; if (tb != null) tb.IsChecked = false; } (sender as ToggleButton).IsChecked = true; } 

вы можете поместить в него сетку с радиокнопками и создать кнопку, подобную шаблону для raduiobuttons. чем просто programmaticaly удалить проверку, если вы не хотите, чтобы кнопки были переключены

Вы также можете попробовать System.Windows.Controls.Primitives.ToggleButton

  Test 

Затем напишите код в IsChecked свойства IsChecked чтобы имитировать эффект радиообъекта

  private void btnTest_Checked(object sender, RoutedEventArgs e) { btn2.IsChecked = false; btn3.IsChecked = false; } 

Эй, я на самом деле разработал решение для этого. Вы можете переопределить шаблон управления для переключателей и поместить кнопки вниз. Здесь я имею реализованное решение в библиотеке с открытым исходным кодом:

http://code.google.com/p/phoenix-control-library/

Вы можете получить рабочее решение для использования вне коробки или взглянуть на исходный код.

Наслаждаться.

Я сделал это для RibbonToggleButtons, но, возможно, он одинаковый для обычных ToggleButtons.

Я привязал IsChecked для каждой кнопки к значению enums «mode» с помощью EnumToBooleanConverter здесь. Как связать RadioButtons с перечислением? (Укажите значение enums для этой кнопки с помощью ConverterParameter. У вас должно быть одно значение enums для каждой кнопки)

Затем, чтобы предотвратить снятие отметки с кнопки, которая уже была проверена, поместите это в свой код для события Click для каждого из RibbonToggleButtons:

  private void PreventUncheckRibbonToggleButtonOnClick ( object sender, RoutedEventArgs e ) { // Prevent unchecking a checked toggle button - so that one always remains checked // Cancel the click if you hit an already-checked button var button = (RibbonToggleButton)sender; if( button.IsChecked != null ) { // Not sure why checked can be null but that's fine, ignore it bool notChecked = ( ! (bool)button.IsChecked ); if( notChecked ){ // I guess this means the click would uncheck it button.IsChecked = true; } } } 

Чтобы помочь людям вроде Джулиана и меня (две минуты назад …). Вы можете получить от RadioButton как это.

 class RadioToggleButton : RadioButton { protected override void OnToggle() { if (IsChecked == true) IsChecked = IsThreeState ? (bool?)null : (bool?)false; else IsChecked = IsChecked.HasValue; } } 

Затем вы можете использовать его, как предложил Удэ Киран …

      

Этот метод позволяет одновременно проверять только один ToggleButton , а также позволяет выполнять удаление.

  • Цифровой ввод данных в WPF
  • Можно ли установить код за словарем ресурса в WPF для обработки событий?
  • Давайте будем гением компьютера.