2017-06-02 302 views
0

我发现WPF和MVVM,我认为我的问题可以帮助我很多在接下来的日子在我的项目上工作。WPF项目,与按钮的侧面菜单导航

硅这里是我有:

visual

所以:

  • 每个按钮打开窗口
  • 激活键具有应用的右侧视图不同风格(如绿色背景)

要加载一个按钮的按钮,我不担心,我会在我的网格onClick上添加一个特定的XAML。

但是为了在活动按钮上应用不同风格,我迷路了。 我是否设置了一个变量onClick和我的风格资源我将触发器绑定到这个变量?我不是如何做到这一点。

我的主窗口被定义这样的:

<Window x:Class="XXXX.UserInterface.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:XXXX.UserInterface" 
     mc:Ignorable="d" 
     Title="MainWindow" 
     Style="{StaticResource CustomWindowStyle}"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="170"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <Border Style="{StaticResource SideMenuBorder}"> 
      <StackPanel Grid.Column="0" Orientation="Vertical"> 
       <Button Click="ButtonCovertC_Click" 
         x:Name="ButtonCovertC" 
         Margin="5.5 9 8.5 0" 
         Style="{StaticResource ButtonSideMenu}" 
         Content="{local:Loc ButtonCovertC}"/> 
       <Button Click="ButtonEarpieceC_Click" 
         x:Name="ButtonEarpieceC" 
         Margin="5.5 14 8.5 0" 
         Style="{StaticResource ButtonSideMenu}" 
         Content="{local:Loc ButtonEarpieceC}"/> 
       <Button Click="ButtonRemoteC_Click" 
         x:Name="ButtonRemoteC" 
         Margin="5.5 14 8.5 0" 
         Style="{StaticResource ButtonSideMenu}" 
         Content="{local:Loc ButtonRemoteC}"/> 
      </StackPanel> 
     </Border> 
    </Grid> 
</Window> 

为了记录在案,我的按钮的样式资源:

<Style x:Key="ButtonSideMenu" TargetType="Button"> 
    <Setter Property="TextBlock.TextAlignment" Value="Center" /> 
    <Setter Property="HorizontalAlignment" Value="Stretch"/> 
    <Setter Property="Height" Value="92"/> 
    <Setter Property="Background" Value="{StaticResource ColorButtonBackground}"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="Button"> 
       <Border CornerRadius="{StaticResource ControlCornerRadius}" Background="{TemplateBinding Background}"> 

        <ContentPresenter VerticalAlignment="Center" /> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="Button.IsDefaulted" Value="True"/> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="FontWeight" Value="DemiBold"/> 
         <Setter Property="Background" Value="{StaticResource ColorLayoutLine}"/> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="True"> 
         <Setter Property="FontWeight" Value="Bold"/> 
         <Setter Property="Background" Value="{StaticResource ColorBoldSelectedButton}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

而且我MainWindow.xaml.cs:

namespace XXXX.UserInterface 
{ 
    /// <summary> 
    /// Logique d'interaction pour MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void ButtonCovertC_Click(object sender, RoutedEventArgs e) 
     { 

     } 

     private void ButtonEarpieceC_Click(object sender, RoutedEventArgs e) 
     { 


     } 

     private void ButtonRemoteC_Click(object sender, RoutedEventArgs e) 
     { 


     } 
    } 
} 

回答

1

使用一个单选按钮,而不是常规按钮。然后,您可以使用样式中的IsChecked属性来更改按钮的背景。这样,当一个按钮被选中时,背景颜色将保持不变。而且由于您使用了单选按钮,一次只能检查1个按钮。

这是一个非常简单和丑陋的(如造型)如何做到这一点的例子。

<Window x:Class="WpfApp1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WpfApp1" 
    mc:Ignorable="d" 
    Title="MainWindow" Height="350" Width="525"> 
<Window.Resources> 
    <Style x:Key="MyStyle" 
      BasedOn="{StaticResource {x:Type ToggleButton}}" 
      TargetType="RadioButton" > 
      <Setter Property="Background" Value="Blue"/> 
      <Setter Property="Width" Value="60"/> 
      <Setter Property="Height" Value="40"/> 
      <Setter Property="BorderBrush" Value="Black"/> 
      <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type RadioButton}"> 
        <Border Height="{TemplateBinding Height}" 
          Width="{TemplateBinding Width}" 
          Background="{TemplateBinding Background}" 
          BorderBrush="{TemplateBinding BorderBrush}"> 
         <ContentPresenter VerticalAlignment="Center" 
              HorizontalAlignment="Center"/> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
     <Style.Triggers> 
      <Trigger Property="IsChecked" Value="True"> 
       <Setter Property="Background" Value="Red"></Setter> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 
<Grid> 
    <RadioButton Content="RadioButton" 
       HorizontalAlignment="Left" 
       Margin="117,123,0,0" 
       VerticalAlignment="Top" 
       Style="{StaticResource MyStyle}" /> 
    <RadioButton Content="RadioButton" 
       HorizontalAlignment="Left" 
       Margin="117,47,0,0" 
       VerticalAlignment="Top" 
       Style="{StaticResource MyStyle}" /> 

</Grid> 
</Window> 
+0

这是完美的。我前往模型窗口状态和一个ViewModel来控制所有这些。对你的解决方案有点矫枉过正。谢谢! – Dexluce