2017-06-02 300 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