2010-06-16 44 views
0

是否有可能在WPF定義一些菜單結構,比在多種環境中使用它?例如,我想使用ContextMenu,Window的菜單和ToolBar中的資源來設置一組菜單項(帶有圖標的ToolBar,沒有標題)。所以物品順序,命令,圖標,分隔符必須定義一次。的MenuItems的多重使用聲明一次(WPF)

我期待這樣的事情:

宣言資源:

<MenuItem Command="MyCommands.CloneObject" 
      CommandParameter="{Binding SelectedObject}" Header="Clone"> 
    <MenuItem.Icon> 
     <Image Source="Images\Clone.png" Height="16" Width="16"></Image> 
    </MenuItem.Icon> 
</MenuItem> 
<MenuItem Command="MyCommands.RemoveCommand" 
      CommandParameter="{Binding SelectedObject}" Header="Remove"> 
    <MenuItem.Icon> 
     <Image Source="Images\Remove.png" Height="16" Width="16"></Image> 
    </MenuItem.Icon> 
</MenuItem> 
<Separator/> 
<MenuItem Command="MyCommands.CreateChild" 
      CommandParameter="{Binding SelectedObject}" Header="Create child"> 
    <MenuItem.Icon> 
     <Image Source="Images\Child.png" Height="16" Width="16"></Image> 
    </MenuItem.Icon> 
</MenuItem> 

用法:

<ToolBar MenuItems(?)="{Reference to set of items}" ShowText(?)="false" /> 

<ContextMenu MenuItems(?)="{Reference to set of items}" /> 

回答

1

你可以這樣做 - 讓一個用戶控制和重新使用 - 對方將無法正常工作,UI元素只能將一個父:

CustomMenu.xaml

<MenuItem x:Class="MyApplication.CustomMenu" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <MenuItem Command="MyCommands.CloneObject" 
      CommandParameter="{Binding SelectedObject}" Header="Clone"> 
     <MenuItem.Icon> 
      <Image Source="Images\Clone.png" Height="16" Width="16"></Image> 
     </MenuItem.Icon> 
    </MenuItem> 
    <MenuItem Command="MyCommands.RemoveCommand" 
      CommandParameter="{Binding SelectedObject}" Header="Remove"> 
     <MenuItem.Icon> 
      <Image Source="Images\Remove.png" Height="16" Width="16"></Image> 
     </MenuItem.Icon> 
    </MenuItem> 
    <Separator/> 
    <MenuItem Command="MyCommands.CreateChild" 
      CommandParameter="{Binding SelectedObject}" Header="Create child"> 
     <MenuItem.Icon> 
      <Image Source="Images\Child.png" Height="16" Width="16"></Image> 
     </MenuItem.Icon> 
    </MenuItem> 
</MenuItem> 

代碼隱藏CustomMenu.xaml.cs:

public partial class CustomMenu 
{ 
    public CustomMenu() 
    { 
     InitializeComponent(); 
    } 
} 

,然後用它在xaml是這樣的:

<ToolBar> 
    <local:CustomMenu/> 
</ToolBar> 
<ContextMenu> 
    <local:CustomMenu/> 
</ContextMenu> 

希望這會有所幫助。

+0

這是做一個好辦法。順便說一下,你在這裏寫的實際上是一個「用戶控件」,它與「自定義控件」略有不同。自定義控件沒有XAML文件,也沒有InitializeComponent調用。相反,它設置了它的DefaultStyleKey並且具有在Themes/Generic.xaml或其合併字典之一中定義的樣式。用戶控件(這是您在此處的內容)在使用時無法添加內容。自定義控件可以。自定義控件在幾個方面也更加強大。只是FYI。你的答案是好的。 – 2010-06-16 19:09:31

+0

你當然是對的。我很sl::-)我編輯了我的回覆以反映這一點。 – Goblin 2010-06-16 19:28:49