2016-08-16 51 views
2

這真是奇怪的問題,我希望有人知道如何解決。 現狀:Windows 10上的ContextMenu和Popup WPF控件錯誤對齊

  1. 我們WPF項目對我們在一些用戶的操作響應顯示上下文菜單(ContextMenu控件)和彈出(彈出式菜單控件)的形式。在大多數情況下,它發生在鼠標點擊某個文本塊上。 下面是一個例子:

     popup = new Popup { 
          Placement = PlacementMode.Relative, 
          PlacementTarget = textBlock, 
          StaysOpen = false 
         }; 
    
         . . . . . 
         //later on mouse click: 
         popup.IsOpen = true; 
    
  2. 彈出窗口必須出現對準其位置目標的左上角(在我們的例子一些文本塊)等 - 它交疊。除了具有平板模式的Windows 10機器(如MS Surface Pro)外,它在所有情況下都能正常工作。 在這種環境下,我們的彈出窗口顯示在展示位置的左側,因此 - 不會重疊。

當我們發現它發生,因爲在這篇文章中所描述的特殊的Windows 10選項: http://www.isunshare.com/windows-10/show-context-menu-on-left-or-right-in-windows-10.html

此選項設置爲「右撇子」在默認情況下(這是可以理解的),但我不不明白爲什麼它會以這種方式影響Popup控件,以及爲什麼它會在桌面模式下發生。

這將是巨大的,找到一個方法來更改此默認行爲,使我們的彈出排列出現在任何情況下父控件的左上角。 有人知道該怎麼做嗎?

+0

看來這裏是一個類似的問題: http://stackoverflow.com/questions/18113597/wpf-handedness-with-popups – Sergiy

回答

1

您可以指定一個PlacementRectangle

<Border Width="300" Height="20" Background="Yellow"> 
    <Popup IsOpen="True" Placement="Left"> 
     <Popup.PlacementRectangle> 
     <Rect X="0" Y="20" Width="0" Height="0" /> 
     </Popup.PlacementRectangle> 
    <Border Width="100" Height="100" Background="Blue"></Border> 
    </Popup> 
</Border> 

它看起來像這樣,即使從事右手平板模式:

enter image description here

這裏的黑客是,Y屬性設置到正確的高度。如果你有一個固定的高度彈出,那可能沒問題。否則,你可以嘗試冰到內容的ActualHeight,但Rect.Y不是一個依賴項屬性你需要一個轉換器從doubleRect用於這一目的。