Как получить группу переключающих кнопок, которые будут действовать как переключатели в WPF?
У меня есть группа кнопок, которые должны действовать как кнопки переключения, но также и как переключатели, в которых можно выбрать или нажать только одну кнопку в текущее время. Он также должен иметь состояние, при котором ни одна из кнопок не будет выбрана / нажата.
Поведение будет похоже на панель инструментов Photoshop, где в любой момент будут выбраны нуль или один из инструментов!
Любая идея, как это можно реализовать в WPF?
- Изменение темы во время выполнения
- Если пользователь регистрируется успешно, то я хочу показать главное окно, если нет, я хочу выйти из приложения
- Как ссылаться на ресурсы изображений в XAML?
- Какие книги WPF вы бы порекомендовали?
- Кто-нибудь знает редактор кода, который я могу встроить в окно WPF или формы Windows?
- WPF Каков правильный способ использования SVG-файлов в качестве значков в WPF
- Преобразовать stream памяти в BitmapImage?
- WPF: динамический просмотр / контент
- Confused with wpf ComboBox DisplayMemberPath, SelectedValue и SelectedValuePath
- Кнопка привязки Нажмите на метод
- Стиль прогрессивного WPF
- Получить bitmap из вида управления
- Установка времени разработки DataContext в окне дает ошибку компилятора?
Самый простой способ – создать стиль 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
, а также позволяет выполнять удаление.