Группировка кнопок Silverlight

Я разрабатываю приложение Silverlight и хотел бы создать группу из 5 переключающих кнопок (используемых для опций меню), которые оживляют при нажатии (увеличиваются в размере), а также заставляют кнопки, ранее нажатые в группе, отменить и анимировать назад к их усохшему размеру.

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

Спасибо! Todd

Ответ 1

Специальный крик Майклу С. Шероттеру для указания меня в правильном направлении использования RadioButton и шаблона управления!

Вот базовый шаблон управления, с которым я столкнулся. Поместите это в App.xaml между тегами, если вы хотите его увидеть. Люди UX дадут ему один раз, чтобы дополнить его, но на данный момент он работает как переключатель, который выглядит как кнопка переключения (или только кнопка), но имеет имя группы.

Важное примечание: этот шаблон не имеет ни одной базовой анимации кнопок, поэтому при нажатии не будет нажата... Это работа UX, о которой я упоминал выше.

    <Style x:Key="MenuButton" TargetType="RadioButton">
        <Setter Property="Width" Value="100"/>
        <Setter Property="Height" Value="25"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="RadioButton">
                    <Border BorderBrush="DarkGray" BorderThickness="3" CornerRadius="3" Background="Gray">
                        <!-- The ContentPresenter tags are used to insert  on the button face for reuse -->
                        <ContentPresenter></ContentPresenter>
                    </Border>
                </ControlTemplate>

            </Setter.Value>
        </Setter>
    </Style>

Ответ 2

Я пытался сделать то же самое, и я нашел этот старый пост. Позвольте мне немного обновить его...

Тодд, похоже, как и многие другие ленивые программисты, позволяя парням UX делать всю работу.:) Итак, вот решение Тодда с фактическими кнопками переключения в качестве переключателей в группе:

<RadioButton GroupName="myGroup"
             Style="{StaticResource MenuButton}"
             Content="One" 
             IsChecked="True" />
<RadioButton GroupName="myGroup"
             Style="{StaticResource MenuButton}"
             Content="Two" />    
<RadioButton GroupName="myGroup"
             Style="{StaticResource MenuButton}"
             Content="Three" />

<Style x:Key="MenuButton" TargetType="RadioButton">
    <Setter Property="Width" Value="100"/>
    <Setter Property="Height" Value="25"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="RadioButton">
                <Border BorderBrush="DarkGray" BorderThickness="3" CornerRadius="3" Background="Gray">
                    <ToggleButton IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}">
                        <ToggleButton.Content>                  
                            <ContentPresenter></ContentPresenter>
                        </ToggleButton.Content>
                    </ToggleButton>                              
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

И теперь у вас будут эффектные эффекты опрокидывания кнопки, и все это, и только одна кнопка переключения может быть "проверена" за один раз.

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

Кроме того, здесь важна привязка длинной формы, поскольку ярлык {TemplateBinding IsChecked} будет по умолчанию одним способом, и нам нужно, чтобы они синхронизировались в обоих направлениях.

В этом примере нет, конечно, анимации кнопок с изменением размера и всего того, что первоначально был отправлен Тоддом, но он дает вам обычные кнопки, которые вы можете легко отличить как проверенные или нет.

Ответ 3

Отдайте всем объектам RadioButton одно и то же имя_группы.