2016-12-22 14 views
1

MicrosoftのSystem.Windows.Controls.Ribbonアセンブリのリボンコントロールを使用するWPFアプリケーションがあります。アプリケーションメニューはほとんどのマシンで正しくレンダリングされていますが、Surface Proではメニュー項目の位置が正しくありません。 Surface Proがさまざまな動作を示している理由と、他のどのステップを試してみるかを知りたい。WPFリボンアプリケーションメニューの配置が正しくない

<RibbonWindow x:Class="RibbonMenuTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 
    <DockPanel> 
     <Ribbon DockPanel.Dock="Top" UseLayoutRounding="True" Background="#98C1F6" > 
      <Ribbon.ApplicationMenu> 
       <RibbonApplicationMenu> 
        <RibbonApplicationMenuItem Header="Menu item 1"> 
         <RibbonApplicationMenuItem Header="Menu item 1.1" /> 
         <RibbonApplicationMenuItem Header="Menu item 1.2" /> 
        </RibbonApplicationMenuItem> 
        <RibbonApplicationMenuItem Header="Menu item 2"> 
         <RibbonApplicationMenuItem Header="Menu item 2.1" /> 
         <RibbonApplicationMenuItem Header="Menu item 2.2" /> 
        </RibbonApplicationMenuItem> 
        <RibbonApplicationMenuItem Header="Menu item 3" /> 
        <RibbonApplicationMenuItem Header="Menu item 4" /> 
       </RibbonApplicationMenu> 
      </Ribbon.ApplicationMenu> 
     </Ribbon> 

     <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="Main content area" /> 
    </DockPanel> 
</RibbonWindow> 

すべては私たちのWindows 10のデスクトップマシン上でうまくレンダリング: Ribbon application menu looks OK on desktops

まず、ここでは(だけサーフェスProの上で)問題を再現するために使用することができ、いくつかの簡単なXAMLです

しかし、メニューは(また、Windows 10を実行している)表面のプロに妙に配置されている: enter image description here

最初に私は私に問題を再現してみました私のディスプレイ(100%=> 150%)のDPI設定をサーフェスに合わせて変更することで、これはうまくいかなかった。アプリケーションは正常に機能していました。

次に、私は、カスタムスタイル使用して、メニューポップアップの配置を上書きしようとした:表面に

<RibbonApplicationMenuItem.Resources> 
    <Style TargetType="Popup"> 
     <Setter Property="Placement" Value="Right" /> 
    </Style> 
</RibbonApplicationMenuItem.Resources> 

を、メニューは完全に配置プロパティを無視するように見えます。同じスタイルを使用して、Horizo​​ntalOffsetとVerticalOffsetプロパティを調整できますが、PlacementTargetに行った変更を無視するようです。私はポップアップをトップレベルのウィンドウに相対的な位置に配置しようとしましたが、私の好みの配置ターゲットを無視して、常に親メニュー項目を使用するようです。

誰もこの問題に遭遇したことはありますか?うまくいけばそれを回避する方法を知っていますか?

+0

最初のスクリーンショットはWindows 7上にあるため、宣言したものをテストしていないか、ここで間違ったスクリーンショットを提供していることがあります。 –

+0

@IvanIčinはい、Windows 7で最初のスクリーンショットが撮られました。しかし、私はWindows 10デスクトップでもプログラムを実行しました。要素は同じ位置にありました。 Win 7マシンは、このテストアプリケーションのスクリーンショットを撮るのに最も便利でした。 – RogerN

+2

これを回避すると、アプリケーションはタッチスクリーンユーザーには使いにくくなることに注意してください。あなたが見ている動作の理由は、あなたが右手の人差し指を使ってメニューを開くと、メニューがあなたの手によって隠されないように置かれるからです。 – hvd

答えて

1

これは、[ペン]オプションの譲渡設定によるものです。 (正確な設定についてはthis tutorialを参照してください)

譲渡設定を無視/無効にするには、WPF Handedness with Popupsを確認してください。

関連する問題