我要如何定义MenuHeaders在WPF与加速器?
题
我想让某些自定义MenuHeaders在WPF所以我可以(例如)、一个图标和案文的菜单项目。
通常使用的菜单项的,如果你填充头域有直接文本,可以添加一个加速通过使用下划线。例如,_File
然而,如果我想放在一个用户控件,我相信这能会破坏,我怎么会做一些类似于以下?
<Menu>
<MenuItem>
<MenuItem.Header>
<UserControl>
<Image Source="..." />
<Label Text="_Open" />
</UserControl>
</MenuItem.Header>
</MenuItem>
...
解决方案
我认为的标的财产适合你的需要。
但是要回答的问题,它是可能的保留的加速器的功能当你撰写的内容你的菜单项. 如果你有套内容的一个菜单项需要定义AccessText明确的财产 喜欢在第一个下。当你使用线形式,这是自动照顾。
<Menu>
<MenuItem>
<MenuItem.Header>
<StackPanel Orientation="Horizontal">
<Image Source="Images/Open.ico" />
<AccessText>_Open..</AccessText>
</StackPanel>
</MenuItem.Header>
</MenuItem>
<MenuItem Header="_Close" />
</Menu>
其他提示
问题是你放的图像内容的MenuHeader这意味着你就失去了加速器的关键。如果你只是想有一个图像在菜单上标题,做到以下几点。
<MenuItem Header="_Open">
<MenuItem.Icon>
<Image Source="images/Open.png"/>
</MenuItem.Icon>
</MenuItem>
如果你想自定义的外观和感觉更进一步,修改 控件 和风格的菜单。从以往的经验,定型的菜单和菜单项更困难,然后定型的其他WPF的控制。
第一个想法,你可能会认为的标的财产只能包含一个图像。但实际上,它可以包含任何东西!我发现这个意外当我编程方式试图设置的图像酒店的直接串的路径图像。结果是,它没有显示图像,但实际文本的道路!然后我发现我必须创造一个图像元首和集到的标的财产。这导致我认为,图像酒店只是任何内容器的容器位于图标区域在留在菜单,并且我是正确的。我试图把一个按钮那里,它的工作!
这是表示一个按钮的文字"我"图标地区的单项目。当你点击按钮,Button_Click事件被触发的(LanguageMenu_Click不是触发当你点击按钮)。
<MenuItem Name="LanguageMenu" Header="_Language" Click="LanguageMenu_Click">
<MenuItem.Icon>
<Button Click="Button_Click">i</Button>
</MenuItem.Icon>
</MenuItem>
这导致一种替代以不必使图像的图标,但是使用的文本有一个符号字体,而不是以显示一个简单的"图标"。下述例子使用的Wingdings字体,其中包含一个质的象征。这个符号字体的映射的明星们已经排起了队 <
, ,它具有特殊的意义在换,因此,我们必须使用的编码版本 <
代替。这工作像做梦一样!下面表示质符号作为一个图标菜单上的项目:
<MenuItem Name="mnuFileSave" Header="Save" Command="ApplicationCommands.Save">
<MenuItem.Icon>
<Label VerticalAlignment="Center" HorizontalAlignment="Center"
FontFamily="Wingdings"><</Label>
</MenuItem.Icon>
</MenuItem>
@a7an:啊,我没有通知的标的财产之前。这是一个良好的开端。
然而,具体地说,我想添加一个额外的按钮到一些菜单项所以我可以有别的特征(见最近加载文件,列出在办事处2007年为特征的想法)。
由于有需要的代码,我将很可能需要的子类的控制并加入的代码按钮吗?(不害怕的玩弄的菜单项模板,已经不得不这样做一次,我会再次这样做,如果我不得不!;))