2017-02-09 7 views
-2

Ich habe ein Menü, das Untermenü für einige Elemente enthält. Das erste Mal öffnet sich das Untermenü, wenn ich auf einen Menüpunkt klicke. Danach wird das nächste Untermenü ohne Mausklick geöffnet. Ich möchte nicht, dass andere Untermenüs ohne Klicken geöffnet werden.Warum wird das Untermenü automatisch in WPF MENU geöffnet?

<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

Vielleicht sollten Sie etwas Code hinzufügen ... damit wir einen Blick darauf werfen können, was vielleicht falsch ist. – r41n

+0

Und was ist das Problem darin? Willst du sie auf button_click öffnen? –

+0

Ich möchte nicht, dass andere Untermenüs ohne Klicken geöffnet werden. –

Antwort

0

Es wird eine bessere Lösung sein, aber dies würde auch sein Werk

Fügen Sie Ihre MenuItem auf XML-Attribut

SubmenuOpened="MenuItem_SubmenuOpened" MouseEnter="MenuItem_MouseEnter" 

und fügen Sie Ihren Code

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; 
    } 

Wenn Sie auf das MenuItem klicken, wird das Ereignis SubMenuOpened zweimal ausgelöst (eines für h über, eins für Klick). Bei Hover, das Untermenü öffnet sich nicht, wegen dieser bool. Aber beim Klicken löst es zweimal aus und der zweite Auslöser öffnet das Untermenü.

Sorry für mein schlechtes Englisch.

Verwandte Themen