WPF - MenuItem缺少图标/图像

no9*_*no9 6 c# wpf icons visual-studio-2010 menuitem

我得到menuItem图标只出现在最后一个menuItem上.如果我只是窥探应用程序,最后一个menuItem在图标中有图像,而如果我调试所有MenuItems似乎在图标中有图像.此外,如果我添加submenuItem一旦我打开子菜单,menuItem上的图标消失,最后一个子菜单获取图标...任何想法?PS:菜单项上的工具提示也不起作用.我使用caliburn微型和流畅的色带控制.

        <ControlTemplate x:Key="dropDownButton">
        <ef:DropDownButton Header="{Binding DisplayName}" 
                           ItemsSource="{Binding Items}" 
                           LargeIcon="{Binding LargeIconPath}" 
                           cm:Message.Attach="ClickAction()" 
                           ef:KeyTip.Keys="{Binding KeyTip}">
            <ef:DropDownButton.ItemContainerStyle>
                <Style TargetType="MenuItem">
                    <Setter Property="Header" 
                            Value="{Binding DisplayName}"/>
                    <Setter Property="Icon">
                        <Setter.Value>
                            <Image Source="{Binding Path=IconPath}"/>
                        </Setter.Value>
                    </Setter>
                    <Setter Property="ItemsSource" 
                            Value="{Binding Items}"/>
                    <Setter Property="cm:Message.Attach" 
                            Value="ClickAction()"/>
                    <Setter Property="ef:KeyTip.Keys" 
                            Value="{Binding KeyTip}"/>
                    <Setter Property="ToolTip">
                        <Setter.Value>
                            <ef:ScreenTip Title="{Binding DisplayName}"
                                          HelpTopic="ScreenTip help ..."
                                          Image="{Binding LargeIconPath}"
                                          Text="Text for ScreenTip"/>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ef:DropDownButton.ItemContainerStyle>
            <ef:DropDownButton.ToolTip>
                <ef:ScreenTip Title="{Binding DisplayName}"
                              HelpTopic="ScreenTip help ..."
                              Image="{Binding LargeIconPath}"
                              Text="Text for ScreenTip"/>
            </ef:DropDownButton.ToolTip>
        </ef:DropDownButton>
Run Code Online (Sandbox Code Playgroud)

dec*_*one 9

您正在将Icon属性设置为Image控件Style.现在,只Style创建了一个副本,因此只创建了一个副本Image.现在,任何控件一次只能有一个父级.因此,当它被分配到最后时MenuItem,它将从之前的MenuItem控件中删除.要解决此问题,请使用Templates.

而不是设置Header属性,设置HeaderTemplate:

            <Setter Property="HeaderTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto" />
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Image Grid.Column="0"
                                   Source="{Binding Path=IconPath}" />
                            <TextBlock Grid.Column="1"
                                       Text="{Binding DisplayName}" />
                        </Grid>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
Run Code Online (Sandbox Code Playgroud)

我不确定您正在使用的控件工具包公开了哪些属性.但是,我确信他们必须拥有模板属性.

执行此操作后,您无需Icon在样式中设置属性.