2016-11-17 12 views
0

wpfアプリケーションでメニューとサブメニューがあり、サブメニュー項目からマウスポインタを削除すると、フォーカスが失われます。たとえば、ボタンホバーが正しく機能しません。しかし、アプリケーションの空き領域をクリックすると、ボタンホバー効果が正しく機能します。WPFアプリケーションがサブメニューが閉じたときにフォーカスが失われる

期待される動作は、ボタンがスタイル/アクションを失ってはならないということです。

enter image description here

ホバー効果:ホバー効果なしenter image description here

enter image description here

コントロールテンプレート従っ

<ControlTemplate x:Key="MenuItemControlTemplate" TargetType="{x:Type MenuItem}"> 
     <Border x:Name="templateRoot" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True"> 
      <Grid VerticalAlignment="Center"> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="Auto"/> 
        <ColumnDefinition Width="Auto"/> 
       </Grid.ColumnDefinitions> 
       <ContentPresenter ContentTemplate="{TemplateBinding HeaderTemplate}" Content="{TemplateBinding Header}" Grid.Column="1" ContentStringFormat="{TemplateBinding HeaderStringFormat}" ContentSource="Header" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
       <Popup x:Name="PART_Popup" 
         AllowsTransparency="True" 
         Focusable="True" IsOpen="{Binding IsSubmenuOpen, RelativeSource={RelativeSource TemplatedParent}}" PopupAnimation="{DynamicResource {x:Static SystemParameters.MenuPopupAnimationKey}}" Placement="Bottom"> 
        <Border x:Name="SubMenuBorder" BorderBrush="#FF999999" BorderThickness="1" Background="#FFF0F0F0" Padding="2,10,0,0"> 
         <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="{Binding Background, ElementName=SubMenuBorder}" Height="{Binding ActualHeight, ElementName=SubMenuBorder}" Width="{Binding ActualWidth, ElementName=SubMenuBorder}"/> 
           </Canvas> 
           <Rectangle Fill="#FFD7D7D7" HorizontalAlignment="Left" Margin="29,2,0,2" Width="1"/> 
           <ItemsPresenter x:Name="ItemsPresenter" KeyboardNavigation.DirectionalNavigation="Cycle" Grid.IsSharedSizeScope="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" KeyboardNavigation.TabNavigation="Cycle"/> 
          </Grid> 
         </ScrollViewer> 
        </Border> 
       </Popup> 
      </Grid> 
     </Border> 
     <ControlTemplate.Triggers> 
      <Trigger Property="IsSuspendingPopupAnimation" Value="True"> 
       <Setter Property="PopupAnimation" TargetName="PART_Popup" Value="None"/> 
       <Setter Property="Background" TargetName="templateRoot" Value="#FFFFFF"/> 
       <Setter Property="BorderBrush" TargetName="templateRoot" Value="#FFFFFF"/> 
      </Trigger> 

      <Trigger Property="CanContentScroll" SourceName="SubMenuScrollViewer" Value="False"> 
       <Setter Property="Canvas.Top" TargetName="OpaqueRect" Value="{Binding VerticalOffset, ElementName=SubMenuScrollViewer}"/> 
       <Setter Property="Canvas.Left" TargetName="OpaqueRect" Value="{Binding HorizontalOffset, ElementName=SubMenuScrollViewer}"/> 
      </Trigger> 

      <Trigger Property="IsHighlighted" Value="True"> 
       <Setter Property="Background" TargetName="templateRoot" Value="#FF666565"/> 
       <Setter Property="BorderBrush" TargetName="templateRoot" Value="#FFE0D3D3"/> 
      </Trigger> 
      <Trigger Property="IsMouseOver" Value="True" > 
       <Setter Property="IsOpen" TargetName="PART_Popup" Value="True"/> 
       <Setter Property="Cursor" Value="Hand"/> 
      </Trigger> 
      <Trigger Property="IsEnabled" Value="False"> 
       <Setter Property="TextElement.Foreground" TargetName="templateRoot" Value="#FF707070"/> 
      </Trigger> 
      <Trigger Property="IsMouseOver" Value="False" > 
       <Setter Property="Background" TargetName="templateRoot" Value="#FFFFFF"/> 
       <Setter Property="BorderBrush" TargetName="templateRoot" Value="#FFDDDDDD"/> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 
+0

UI用のフレームワークを使用していますか、または裸のWPFのみですか? – dymanoid

+0

私は生のWPFを使用しています –

答えて

0

として、私は右のあなたを取得する場合、あなたは意味しません、アプリケーションはフォーカスを失います(そうでない場合は、あなたはeを打つ。 g。 TAB)、開いているサブメニューとそれに対応するメインメニューだけがマウスに反応します。

これは、ポップアップが開かれたときのWPFアプリケーションの標準動作です。コンテキストメニューを開くときも同じです。 WinFormsアプリケーションでも同じです。

これはVisual Studioでも確認できます。

EDIT

あなたがmenueitemをクリックして、マウスを移動するとだから我々はあなたがこの

を取得submenue渡って(何のボタンが押されていない)アプリのmainmenue

enter image description here

を持っていますenter image description here

移動後病気の何ボタンが押されていない、ちょうどサブメニューサブメニューが閉じた

enter image description here

の下にダウン)すべての道を移動しますか?それが本当であれば、これは標準的なmenueの振る舞いではないのでmenuesの定義を見てください。

+0

サブメニューを開いてサブメニューからカーソルを移動すると、サブメニューが閉じた後、同じウィンドウのボタンにカーソルを置きますが、ボタンのホバースタイリング(マウスポインタ=カーソル)は動作しません –

+0

私の投稿の編集されたセクションを見てください –

+0

そのメニュー/メニューアイテムコレクションのLostFocusにリンクして、コードビハインド、 – maximdumont

関連する問題