2016-11-17 167 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中檢查這一點。

編輯

所以我們有一個應用程序mainmenue

enter image description here

當你點擊一個menueitem和移動鼠標(無按鈕按下)橫跨submenue你得到這個

enter image description here

移動後(st生病沒有按鈕被按下,只是移動)一路下跌子菜單

enter image description here

子菜單下關閉?如果這是真的,你應該看看菜單定義(也許在這裏發佈),因爲這不是標準的菜單行爲。

+0

我擔心的是,當我打開一個子菜單並從子菜單項移動光標時,子菜單變爲關閉,之後我將光標放在同一個窗口上的按鈕上,但按鈕懸停式樣(例如鼠標指針=光標)不起作用 –

+0

請看看我的文章的編輯部分 –

+0

可以隨時鏈接到該菜單/菜單項集合的LostFocus,並關閉它在代碼後面,或者這個效果 – maximdumont

相關問題