2017-02-09 142 views
-2

我有一個包含少量項目的子菜單的菜單。第一次,子菜單打開時,我點擊一個菜單項。在那之後,下一個子菜單在沒有點擊的情況下打開,只是懸停。我不希望其他子菜單在沒有點擊的情況下打開。爲什麼在WPF菜單中自動打開子菜單?

<ControlTemplate x:Key="MenuItemControlTemplate1" TargetType="{x:Type MenuItem}"> 
      <Border x:Name="templateRoot" 
       Background="{TemplateBinding Background}" 
       SnapsToDevicePixels="True" Margin="0,-7,0,5"> 
       <Grid VerticalAlignment="Center"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto"/> 
         <ColumnDefinition Width="Auto"/> 
        </Grid.ColumnDefinitions> 


        <ContentPresenter x:Name="mainMenuHeaderContainer" Cursor="Hand" Margin="0,0,0,13" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Grid.Column="1" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
        <Popup x:Name="PART_Popup" AllowsTransparency="True" Focusable="False" IsOpen="{Binding IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}" Placement="Bottom"> 
         <Border x:Name="SubMenuBorder" BorderBrush="#595959" BorderThickness=".5,0,0,0" Background="#32a3cf"> 
          <ScrollViewer x:Name="SubMenuScrollViewer" Style="{DynamicResource {ComponentResourceKey ResourceId=MenuScrollViewer, TypeInTargetAssembly={x:Type FrameworkElement}}}"> 
           <Grid RenderOptions.ClearTypeHint="Enabled"> 
            <Canvas HorizontalAlignment="Left" Height="0" VerticalAlignment="Top" Width="0"> 
             <Rectangle x:Name="OpaqueRect" Fill="#666" Height="{Binding ActualHeight, ElementName=SubMenuBorder}" Width="{Binding ActualWidth, ElementName=SubMenuBorder}"/> 
            </Canvas> 
            <ItemsPresenter x:Name="ItemsPresenter"/> 
           </Grid> 
          </ScrollViewer> 
         </Border> 
        </Popup> 
       </Grid> 
      </Border> 
      <ControlTemplate.Triggers> 
       <Trigger Property="IsSuspendingPopupAnimation" Value="True"> 
        <Setter Property="PopupAnimation" TargetName="PART_Popup" Value="None"/> 
       </Trigger> 
       <Trigger Property="IsHighlighted" Value="True"> 
        <Setter Property="Background" TargetName="templateRoot" Value="#32a3cf"/> 
       </Trigger> 
       <Trigger Property="IsKeyboardFocusWithin" Value="True"> 
        <Setter TargetName="templateRoot" Property="Background" Value="#32a3cf" /> 
       </Trigger> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 

     <ControlTemplate x:Key="MenuItemControlTemplate2" TargetType="{x:Type MenuItem}"> 
      <Border x:Name="templateRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness=".5,0,.5,.5" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
       <Grid Margin="-1" Cursor="Hand"> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition MinWidth="22" SharedSizeGroup="MenuItemIconColumnGroup" Width="Auto"/> 
         <ColumnDefinition Width="13"/> 
         <ColumnDefinition Width="*"/> 
         <ColumnDefinition Width="30"/> 
         <ColumnDefinition SharedSizeGroup="MenuItemIGTColumnGroup" Width="Auto"/> 
         <ColumnDefinition Width="20"/> 
        </Grid.ColumnDefinitions> 
        <ContentPresenter x:Name="menuHeaderContainer" ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Grid.Column="2" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" HorizontalAlignment="Left" Margin="{TemplateBinding Padding}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center"/> 
        <TextBlock x:Name="menuGestureText" Grid.Column="4" Margin="{TemplateBinding Padding}" Opacity="0.7" Text="{TemplateBinding InputGestureText}" VerticalAlignment="Center"/> 
       </Grid> 
      </Border> 
      <ControlTemplate.Triggers> 

       <Trigger Property="IsHighlighted" Value="True"> 
        <Setter Property="BorderBrush" TargetName="templateRoot" Value="White"/> 
        <Setter Property="Background" TargetName="templateRoot" Value="#32a3cf"/> 
        <Setter Property="TextBlock.Foreground" TargetName="menuHeaderContainer" Value="White" /> 
       </Trigger> 
       <!--<Trigger Property="IsEnabled" Value="False"> 
        <Setter Property="TextElement.Foreground" TargetName="templateRoot" Value="#FF707070"/> 
       </Trigger>--> 
       <!--<MultiTrigger> 
        <MultiTrigger.Conditions> 
         <Condition Property="IsHighlighted" Value="True"/> 
         <Condition Property="IsEnabled" Value="False"/> 
        </MultiTrigger.Conditions> 
        <Setter Property="Background" TargetName="templateRoot" Value="#0A000000"/> 
        <Setter Property="BorderBrush" TargetName="templateRoot" Value="#21000000"/> 
       </MultiTrigger>--> 
      </ControlTemplate.Triggers> 
     </ControlTemplate> 


    <Menu x:Name="menu_main_project" Grid.Column="1" Grid.Row="0"> 

         <MenuItem Height="42" Template="{DynamicResource MenuItemControlTemplate1}" Width="140"> 

          <MenuItem.Header> 
           <DockPanel HorizontalAlignment="Stretch"> 
            <Rectangle x:Name="menuBarApplication" Fill="#32a3cf" Width="140" Height="4" DockPanel.Dock="Top" Margin="0,3,0,0"/> 
            <Image Source="/Resources/ico_application.png" Stretch="Fill" DockPanel.Dock="Left" Margin="10,2,0,0" Height="19" Width="22"> 
            </Image> 
            <ContentPresenter x:Name="APPLICATION_MENU" TextBlock.Foreground="#0e526a" Margin="4,0,0,0" Content="Application" DockPanel.Dock="Right" VerticalAlignment="Center"/> 
           </DockPanel> 
          </MenuItem.Header> 
          <!--<MenuItem Header="Learner" x:Name="menuItem_LearnerApplicationHome" Click="OnClick_LearnerApplicationHome"/>--> 
          <MenuItem Template="{DynamicResource MenuItemControlTemplate2}" Header="DL" x:Name="menuItem_DLApplicationHome" Click="OnClick_DLApplicationHome" Foreground="#0e526a" Margin="-10,0,0,0" Background="White"/> 
          <MenuItem Template="{DynamicResource MenuItemControlTemplate2}" Header="Adjudication" x:Name="menuItem_Adjudication" Click="OnClick_AdjudicationHome" Foreground="#0e526a" Margin="-10,0,0,0" Background="White"/> 
          <MenuItem Template="{DynamicResource MenuItemControlTemplate2}" Header="Summary" x:Name="menuItem_Application_Summary" Click="OnClick_ApplicationSummaryHome" Foreground="#0e526a" Margin="-10,0,0,0" Background="White"/> 
         </MenuItem> 
         <MenuItem Width="105" Height="42" Template="{DynamicResource MenuItemControlTemplate1}"> 
          <MenuItem.Header> 
           <DockPanel HorizontalAlignment="Stretch"> 
            <Rectangle x:Name="menuBarCard" Fill="#32a3cf" Width="105" Height="4" DockPanel.Dock="Top" Margin="0,3,0,0"/> 
            <Image Source="/Resources/ico_card.png" Margin="20,2,0,0" Stretch="Fill" DockPanel.Dock="Left" Height="19" Width="22"/> 
            <ContentPresenter x:Name="CARD_MENU" Margin="4,0,0,0" Content="Card" TextBlock.Foreground="#0e526a" DockPanel.Dock="Right" VerticalAlignment="Center"/> 
           </DockPanel> 
          </MenuItem.Header> 
          <MenuItem Header="Card" Template="{DynamicResource MenuItemControlTemplate2}" Name="menuItem_CardHome" Click="OnClick_CardkHome" Margin="-10,0,0,0" Background="White" Foreground="#0e526a"/> 
          <MenuItem Header="Summary" Template="{DynamicResource MenuItemControlTemplate2}" x:Name="menuItem_Card_Summary" Click="OnClick_CardSummaryHome" Foreground="#0e526a" Margin="-10,0,0,0" Background="White"/> 
<!-- Menu --> 
         </MenuItem> 
         <MenuItem Width="105" Height="42" Template="{DynamicResource MenuItemControlTemplate1}"> 
          <MenuItem.Header> 
           <DockPanel HorizontalAlignment="Stretch"> 
            <Rectangle x:Name="menuBarStock" Fill="#32a3cf" Width="105" Height="4" DockPanel.Dock="Top" Margin="0,3,0,0"/> 
            <Image Source="/Resources/ico_stock.png" Margin="18,2,0,0" Stretch="Fill" DockPanel.Dock="Left" Height="19" Width="22"/> 
            <ContentPresenter x:Name="STOCK_MENU" Margin="4,0,0,0" Content="Stock" TextBlock.Foreground="#0e526a" DockPanel.Dock="Right" VerticalAlignment="Center"/> 
           </DockPanel> 
          </MenuItem.Header> 
          <MenuItem Header="Stock" Template="{DynamicResource MenuItemControlTemplate2}" Name="menuItem_StockHome" Click="OnClick_StockHome" Margin="-10,0,0,0" Background="White" Foreground="#0e526a"/> 
          <MenuItem Header="Item" Template="{DynamicResource MenuItemControlTemplate2}" Name="menuItem_ItemHome" Click="OnClick_ItemHome" Margin="-10,0,0,0" Background="White" Foreground="#0e526a"/> 
          <MenuItem Header="Summary" Template="{DynamicResource MenuItemControlTemplate2}" x:Name="menuItem_Stock_Summary" Click="OnClick_BoxSummaryHome" Foreground="#0e526a" Margin="-10,0,0,0" Background="White"/> 

         </MenuItem> 
         </Menu> 
+1

也許你應該添加一些代碼......以便我們可以看看可能是錯誤的。 – r41n

+0

它有什麼問題?你想在button_click上打開它們嗎? –

+0

我不想讓其他子菜單在沒有點擊的情況下打開。 –

回答

0

將會有更好的解決方案,但是這將是工作太

添加XML的

SubmenuOpened="MenuItem_SubmenuOpened" MouseEnter="MenuItem_MouseEnter" 

你的菜單項屬性,並添加到您的代碼

bool open = true; 
    private void MenuItem_SubmenuOpened(object sender, RoutedEventArgs e) 
    { 
     ((MenuItem)sender).IsSubmenuOpen = open; 
     open = true; 
    } 
    private void MenuItem_MouseEnter(object sender, MouseEventArgs e) 
    { 
     open = false; 
    } 

當您單擊MenuItem時,SubMenuOpened事件觸發兩次(一次爲h結束,一個用於點擊)。 懸停時,由於該布爾,子菜單未打開。但是在點擊時,它觸發兩次,第二個觸發器打開子菜單。

對不起,我的英語不好。