Группировка переключателей Silverlight - PullRequest
11 голосов
/ 03 июня 2009

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

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

Спасибо! Тодд

Ответы [ 3 ]

7 голосов
/ 05 июня 2009

Особые пожелания Майклу С. Шероттеру, который указал мне правильное направление, чтобы использовать 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>
4 голосов
/ 23 мая 2012

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

Тодд, похоже, похож на многих других ленивых программистов, позволяющих 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 голосов
/ 03 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...