Кнопка. Выбранный тип свойства в WPF MVVM? - PullRequest
1 голос
/ 31 мая 2011

У меня есть несколько кнопок в меню в моем приложении WPF.

Этот сценарий похож на меню на веб-сайте.

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

Можете ли вы сказать мне, как я могу добиться этого с помощью ControlTemplate или мне нужно поддерживать свойство IsSelected, которое сообщает нам, какая кнопка выбрана?

Спасибо,

VJ

Ответы [ 3 ]

6 голосов
/ 31 мая 2011

Вы можете попробовать с помощью RadionButton.Приведенный ниже пример создаст плоский образ для RadioButton.

<Window x:Class="WpfApplication8.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="472">
<Window.Resources>
    <Style TargetType="{x:Type RadioButton}">
        <Setter Property="Focusable"
                Value="False" />
        <Setter Property="GroupName"
                Value="filter" />
        <Setter Property="IsTabStop"
                Value="False" />
        <Setter Property="VerticalAlignment"
                Value="Center" />
        <Setter Property="HorizontalAlignment"
                Value="Center" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type RadioButton}">
                    <ControlTemplate.Resources>

                        <Style TargetType="{x:Type TextBlock}">
                            <Setter Property="VerticalAlignment"
                                    Value="Center" />
                            <Setter Property="HorizontalAlignment"
                                    Value="Center" />
                        </Style>

                    </ControlTemplate.Resources>
                    <Border x:Name="PART_border"
                            CornerRadius="2"
                            Margin="2"
                            Background="Transparent"
                            BorderThickness="1"
                            BorderBrush="{x:Static SystemColors.ControlDarkBrush}"
                            SnapsToDevicePixels="True">
                        <StackPanel Orientation="Horizontal"
                                    HorizontalAlignment="Center" VerticalAlignment="Center">
                            <ContentPresenter x:Name="PART_content" />
                        </StackPanel>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsChecked"
                                 Value="True">
                            <Setter TargetName="PART_content"
                                    Property="TextBlock.FontWeight"
                                    Value="Bold" />
                            <Setter TargetName="PART_border"
                                    Property="Background">
                                <Setter.Value>
                                    <LinearGradientBrush StartPoint="0,0"
                                                         EndPoint="0,1">
                                        <GradientStop Color="Black"
                                                      Offset="0" />
                                        <GradientStop Color="white"
                                                      Offset="1" />
                                    </LinearGradientBrush>
                                </Setter.Value>
                            </Setter>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Grid>
    <StackPanel Orientation="Horizontal" >
    <RadioButton Height="30" Width="100" Content="First"></RadioButton>
    <RadioButton Height="30"
                 Width="100"
                 Content="Second"></RadioButton>
    <RadioButton Height="30"
                 Width="100"
                 Content="First"></RadioButton>
        </StackPanel>
</Grid>

для RadioButton с изображением, просто посмотрите в блоге Мэтта

http://madprops.org/blog/wpf-killed-the-radiobutton-star/

1 голос
/ 31 мая 2011

Вы должны использовать встроенную визуальную обработку состояний и создавать состояния / стили в XAML.

В вашем конкретном случае кажется, что вы ищете группу RadioButton, так что вам не нужно писать код для переключения между состояниями.

0 голосов
/ 31 мая 2011

Для этой цели лучше использовать пользовательский список RadioButton. Проверьте следующий пост.

Не разрешайте отменять выбор / отменять выбор в ListBox

Вы можете легко настроитьвыбранные и отмененные стили, соответствующие вашему требованию

...