我模仿菜单中显示项目的方式,但由于未知原因,我在菜单项中显示整个文本时遇到问题。以下是问题的截屏: alt text http://img203.imageshack.us/img203/4513/capturexz.png
以下是我用来模板化的标记代码:
<ItemsPanelTemplate x:Key="SideBarItemsPanelTemplate">
<StackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
<DataTemplate x:Key="SideBarItemTemplate">
<MenuItem Command="{Binding}" Header="{Binding Text}" Background="AliceBlue">
<MenuItem.Icon>
<Image Width="16" Height="16" Source="{Binding Image}"/>
</MenuItem.Icon>
</MenuItem>
</DataTemplate>
<Style x:Key="SideBarStyle" TargetType="{x:Type Menu}">
<Setter Property="ItemTemplate" Value="{StaticResource SideBarItemTemplate}"/>
<Setter Property="ItemsPanel" Value="{StaticResource SideBarItemsPanelTemplate}"/>
<Setter Property="Background" Value="White"/>
</Style>
并显示它:
<Menu ItemsSource="{Binding Commands}" Style="{StaticResource SideBarStyle}"/>
我搜索了很多,但没有任何帮助解决这个问题。希望我能在这里找到一些帮助。
感谢。
答案 0 :(得分:1)
你得到了奇怪的行为,因为你在MenuItem中有一个MenuItem。通过在菜单上设置ItemTemplate,您将在每个MenuItem上设置HeaderTemplate。 MenuItem将呈现其正常模板,并且通常将放置标题文本的位置将具有整个其他MenuItem。我认为你看到的空间是外部MenuItem中为InputGestureText保留的空间。
相反,您想要设置ItemContainerStyle。这将允许您在菜单创建的MenuItem上设置属性。您需要使用一个技巧,以便为每个MenuItem创建单独的Image对象。默认情况下,样式中包含的对象将被共享,并且您将获得每个MenuIte共享的一个Image对象,但如果将它们放在单独的资源字典中,则可以将它们标记为不共享。请参阅this issue on Connect和linked workaround。
这样的事情:
<Style x:Key="SideBarStyle" TargetType="{x:Type Menu}">
<Setter Property="ItemsPanel" Value="{StaticResource SideBarItemsPanelTemplate}"/>
<Setter Property="Background" Value="White"/>
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="MenuItem">
<Style.Resources>
<ResourceDictionary Source="Icon.xaml"/>
</Style.Resources>
<Setter Property="Command" Value="{Binding}"/>
<Setter Property="Header" Value="{Binding Text}"/>
<Setter Property="Background" Value="AliceBlue"/>
<Setter Property="Icon" Value="{StaticResource Icon}"/>
</Style>
</Setter.Value>
</Setter>
</Style>
Icon.xaml包含:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Image x:Key="Icon" x:Shared="False" Width="16" Height="16" Source="{Binding Image}"/>
</ResourceDictionary>