У меня есть список объектов, которые мне нужно представить в виде списка кнопок.
Эти кнопки обычно должны действовать как обычные кнопки; Когда флажок установлен, они должны работать как кнопки ToggleButtons и оставаться нажатыми. Но мне также нужно, чтобы они были взаимоисключающими, как RadioButton (только один может быть переключен в любое время).
Я пытался использовать RadioButton в качестве шаблона для моего ItemsControl, но они не являются взаимоисключающими (я полагаю, что они на самом деле не являются дочерними элементами одного элемента управления).
Поэтому я решил использовать ToggleButton в качестве шаблона, вручную снять его, если флажок не установлен, и вручную обработать взаимное исключение.
Тем не менее, я не могу найти способ получить кнопки-переключатели для других элементов в списке, чтобы снять их.
Вот мой XAML:
<Window x:Class="WpfApp9.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<UniformGrid Rows="1">
<UniformGrid.Resources>
<DataTemplate x:Key="template">
<ToggleButton Name="Toggle"
Checked="ToggleButton_Checked"
Content="{Binding}"/>
</DataTemplate>
</UniformGrid.Resources>
<ItemsControl Name="lst" ItemTemplate="{StaticResource template}" />
<CheckBox Name="CheckToggle"
HorizontalAlignment="Center"
VerticalAlignment="Center">
TOGGLE
</CheckBox>
</UniformGrid>
</Window>
А это мой код:
using System.Windows;
using System.Windows.Controls.Primitives;
namespace WpfApp9
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
lst.ItemsSource = new[] { "foo", "bar", "baz" };
}
private void ToggleButton_Checked(object sender, RoutedEventArgs e)
{
var toggle = (ToggleButton)sender;
// If the checkbox is not checked, release the button immediately
if (CheckToggle.IsChecked != true)
toggle.IsChecked = false;
// now how do I uncheck the other ToggleButtons?
}
}
}