Задать вопрос

Как деактивировать все toggle button кроме одного при клике?

Имеется 8 toggle button. При клике одну из кнопок все остальные становятся isEnable = False

Как это сделать?
Желательно это сделать в коде а не в xaml, так как эти кнопки будут ещё вызывать другие методы

<!--Toggle Button-->
    <Style x:Key="ToggleButton" TargetType="{x:Type ToggleButton}">
        <Setter Property="Background" Value="#535353"/>
        <Setter Property="BorderThickness" Value="0"/>
        <Setter Property="MinHeight" Value="30"/>        
        <Setter Property="Grid.Column" Value="1"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ToggleButton}">
                    <Border Background="{TemplateBinding Background}"
                            BorderThickness="0">
                    </Border>                    
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


<ToggleButton x:Name="CategoryToggle1"
                      Grid.Row="1"
                      
                      Style="{StaticResource ToggleButton}"
                      Checked="ShowOptions"
                      Unchecked="HideOptions" />
  • Вопрос задан
  • 948 просмотров
Подписаться 3 Простой 2 комментария
Решения вопроса 1
SpacePurr
@SpacePurr
c#, wpf
Определите такой стиль
<Window.Resources>
    <Style TargetType="RadioButton" BasedOn="{StaticResource {x:Type ToggleButton}}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate>
                    <ToggleButton IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"
                        Content="{Binding Content, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>


Теперь просто объявите нужное количество RadioButton
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>

    <RadioButton Grid.Column="0" Width="50" Height="50" />
    <RadioButton Grid.Column="1" Width="50" Height="50" />
    <RadioButton Grid.Column="2" Width="50" Height="50" />
</Grid>


При нажатии на кнопку только она становится активной. При повторном нажатии на нее она становится неактивной.

5de755219b192060452254.gif

Также, если вы хотите сделать группы таких кнопок, вам нужно добавить к RadioButton свойство GroupName с именем группы.
<RadioButton GroupName="Group1"/>
<RadioButton GroupName="Group1"/>
<RadioButton GroupName="Group1"/>

<RadioButton GroupName="Group2"/>
<RadioButton GroupName="Group2"/>
<RadioButton GroupName="Group2"/>


Тогда нажатие на кнопку из Group1 никак не будет влиять на кнопки из Group2.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AndrewN
Просто используйте RadioButton, это стандартное поведение для него. Установите ему стиль
<Style TargetType="RadioButton" BasedOn="{StaticResource {x:Type ToggleButton}}"/>

https://ru.stackoverflow.com/a/818494/218063
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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