2011-10-28 106 views
0

我有一個垂直菜單設置在窗口的左側。它的項目剛好在(上面)打開,這樣可以防止用戶在打開項目時全面查看菜單。在wpf中對齊菜單

我希望每個元素都在菜單的右側打開,以便對菜單的其餘部分和打開的元素有一個完整的視圖。如何才能做到這一點?可能是藉助轉換或觸發器?

下面是一些代碼:

<MenuItem Header="Maths"> 
    <MenuItem Background="LightGray" Header="Add"/> 
    <MenuItem Background="LightGray" Header="Subtract"/> 
    <MenuItem Background="LightGray" Header="Multiply"/> 
    <MenuItem Background="LightGray" Header="Divide"/> 
</MenuItem> 
+3

那麼代碼並沒有真正說明太多。截圖怎麼樣?所以我們可以看到問題... – 2011-10-28 19:16:52

+0

我認爲這很明顯。菜單項不在右側打開,而是在其上方,而不是隱藏菜單的其餘部分。我希望內容正好顯示(因爲它是左側的垂直菜單)。 – arjacsoh

回答

1

所以僅僅是明確的,在菜單項「數學」上面是一個WPF菜單,你已經改變了菜單的ItemsPanel是一個垂直的StackPanel或東西,所以「數學'高於/低於其他同級菜單項。如果是這樣的話,MenuItem的角色是TopLevelHeader(具有子項並且直接在Menu中的MenuItem)的默認模板是這樣的,即彈出在菜單項下面(或上面)。您可能需要重新設定這些菜單項。在hacky(和醜陋的替代品)上使用將用於SubmenuHeader角色菜單項(即具有子項並且在另一個MenuItem內的MenuItem)的模板。例如

<Menu HorizontalAlignment="Left"> 
    <Menu.ItemsPanel> 
     <ItemsPanelTemplate> 
     <StackPanel /> 
     </ItemsPanelTemplate> 
    </Menu.ItemsPanel> 
    <Menu.ItemContainerStyle> 
     <Style TargetType="MenuItem"> 
     <Style.Triggers> 
      <Trigger Property="Role" Value="TopLevelHeader"> 
      <Setter Property="Template" Value="{DynamicResource {x:Static MenuItem.SubmenuHeaderTemplateKey}}" /> 
      </Trigger> 
      <Trigger Property="Role" Value="TopLevelItem"> 
      <Setter Property="Template" Value="{DynamicResource {x:Static MenuItem.SubmenuItemTemplateKey}}" /> 
      </Trigger> 
     </Style.Triggers> 
     </Style> 
    </Menu.ItemContainerStyle> 
    <MenuItem Header="Just Item" /> 
    <MenuItem Header="Maths"> 
     <MenuItem Header="Add" /> 
     <MenuItem Header="Subtract" /> 
    </MenuItem> 
    <MenuItem Header="Misc"> 
     <MenuItem Header="Other" /> 
    </MenuItem> 
    </Menu> 
+0

好吧,就是這樣。我在哪裏可以找到相關的源代碼(例如教程),詳細解釋代碼的工作原理?無論如何,這很好。 – arjacsoh

+0

不確定你指的是什麼代碼。如果你指的是如何設置menuitem模板,那麼你最好的選擇是使用Snoop(snoopwpf.codeplex.com/)來檢查可視化樹,或者你可以在默認模板上查看ms的信息( http://msdn.microsoft.com/en-us/library/ms747082(v=vs.85).aspx)。在這種情況下,如果你在'數學'菜單項上窺探過,那麼你會發現彈出菜單的位置被設置爲'底部'。 – AndrewS