Как я могу создать набор ToggleButtons, которые ведут себя как RadioButtons?

Я использую C # и WPF, и в основном я хочу иметь несколько кнопок переключения, и только одна из них может быть выбрана одновременно.

Я нашел еще один вопрос по этому поводу, но показанное там решение не работает, и я не знаю почему.

Если я попытаюсь сделать это, как указано в вопросе выше, ItemTemplate из ListBox не применяется. Я просто не помещаю кнопки-переключатели в список, вместо этого он отображается как «обычный список».

Мой стиль кнопки переключения выглядит так, он содержится в одном из моих файлов ресурсов:

<Style x:Key="ToggleButtonListBox" TargetType="{x:Type ListBox}">
    <Setter Property="ListBox.ItemTemplate">
        <Setter.Value>
            <DataTemplate>
                <ToggleButton Content="{Binding}"
                          IsChecked="{Binding IsSelected, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" />
            </DataTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="ListBox.ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal" />
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="BorderThickness" Value="0" />
</Style>

Я хотел бы добавить элементы непосредственно в код XAML, чтобы мой код для этого выглядел примерно так:

<ListBox Style="{StaticResource ToggleButtonListBox}">
    <ListBoxItem>test1</ListBoxItem>
    <ListBoxItem>test2</ListBoxItem>
</ListBox>

Как я могу создать такой набор кнопок?


person Sören    schedule 08.02.2011    source источник
comment
возможный дубликат Как заставить группу переключателей работать как переключатели в WPF?   -  person Ral Zarek    schedule 14.07.2014


Ответы (1)


Если вы хотите, чтобы радиокнопки, которые выглядели как переключатели, не были стилизованы под переключатели, решали вашу проблему?

<StackPanel>
    <RadioButton GroupName="groupFoo" Style="{StaticResource {x:Type ToggleButton}}">Button 1</RadioButton>
    <RadioButton GroupName="groupFoo" Style="{StaticResource {x:Type ToggleButton}}">Button 2</RadioButton>
</StackPanel>
person R. Martinho Fernandes    schedule 08.02.2011
comment
да, я думаю, это действительно решило мою проблему. Это намного проще, чем я пытался. Несмотря на то, что я подумал об этом на короткое время, я не мог представить, что это работает так хорошо и так просто. Я отредактирую решение в вопросе выше. Большое спасибо! - person Sören; 08.02.2011
comment
@ Sören: Это одна из величайших особенностей WPF: поведение отделено от презентации. Также лучше было бы выложить решение в качестве ответа. Через некоторое время вы сможете принять это как правильный ответ. - person R. Martinho Fernandes; 08.02.2011
comment
Я знаю, я пытался принять это, но это еще не сработало (блокировка на 3 минуты). Теперь это произошло. Еще раз спасибо! - person Sören; 08.02.2011
comment
проблема в том, что вы не можете снять галочку - person GorillaApe; 10.12.2012
comment
К сожалению, трюк с x: Type ToggleButton больше не работает - у меня VS 15.7.4 и .NET 4.7.2, и VS жалуется, что ресурс {x: Type ToggleButton} не может быть разрешен! Дох ... - person Vincent; 17.07.2018