用于Icon MenuItem的图标DataTemplate

时间:2015-05-15 18:53:36

标签: wpf xaml

我为menuitem.icon创建了一些图形。

<DataTemplate x:Key="navigation_arrow">
    <DockPanel LastChildFill="True" HorizontalAlignment="Center" VerticalAlignment="Center">
        <Grid>
            <Canvas>
                 <Rectangle Fill="Red" Width="30" Height="20"/>
            </Canvas>
        </Grid>
    </DockPanel>
</DataTemplate>

然后我尝试将此模板用于menuitem.icon

<MenuItem Header="" Icon="{Binding navigation_arrow}"/>

但它是空的menuitem。如果我在MenuItem.Icon中插入模板代码,那么一切正常

2 个答案:

答案 0 :(得分:3)

首先:你的绑定是错误的。您必须将此密钥用作{DynamicResource navigation_arrow}{StaticResource navigation_arrow}

但它没有用。您的图标将是&#34; System.Windows.DataTemplate&#34;在这种情况下,字符串。

DataTemplate表示&#34;它将为数据应用模板&#34;。您还没有获取图标数据,因此无法为此应用模板。

您必须添加具体项目作为图标(如您所述)或为其创建样式:

<Style TargetType="MenuItem">
    <Setter Property="Icon">
        <Setter.Value>
            <DockPanel LastChildFill="True" HorizontalAlignment="Center" VerticalAlignment="Center">
                 <Grid>
                     <Canvas>
                         <Rectangle Fill="Red" Width="30" Height="20"/>
                     </Canvas>
                 </Grid>
            </DockPanel>
        </Setter.Value>
    </Setter>
</Style>

但奇特的方式是:

答案 1 :(得分:0)

您可以使用 ContentControl

<MenuItem.Icon>
    <ContentControl ContentTemplate="{StaticResource navigation_arrow}"/>
</MenuItem.Icon>