2016-08-16 30 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. ポップアップがその配置のターゲット(この例では、いくつかのテキストブロック)の左上隅に整列し、そう表示される必要があります。それは、タブレットモード(MS Surface Proなど)を持つWindows 10マシンを除くすべてのケースでうまく機能します。 このような環境では、ポップアップはプレースメントターゲットの左側に表示されるため、重複しません。

我々はこの資料に記載されている特別な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は依存関係のプロパティではないため、doubleからRectへのコンバータが必要です。

関連する問題