Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF菜单中的菜单项图标消失_Wpf - Fatal编程技术网

WPF菜单中的菜单项图标消失

WPF菜单中的菜单项图标消失,wpf,Wpf,我使用此XAML从视图模型渲染菜单: <DockPanel> <Menu DockPanel.Dock="Top" ItemsSource="{Binding MenuItems}"> <Menu.Resources> <SolidColorBrush x:Key="ImageBrush" Color="Blue"/> <HierarchicalDataTemplate

我使用此XAML从视图模型渲染菜单:

<DockPanel>
    <Menu DockPanel.Dock="Top" ItemsSource="{Binding MenuItems}">
        <Menu.Resources>
            <SolidColorBrush x:Key="ImageBrush" Color="Blue"/>

            <HierarchicalDataTemplate DataType="{x:Type local:MenuItemViewModel}" ItemsSource="{Binding Path=ChildMenuItems}">
                <HierarchicalDataTemplate.ItemContainerStyle>
                    <Style TargetType="MenuItem">
                        <Setter Property="Command" Value="{Binding Command}" />
                        <Setter Property="Icon">
                            <Setter.Value>
                                <Image Source="{Binding Path=Icon, Converter={fa:ImageSourceConverter}, ConverterParameter={StaticResource ImageBrush}}" />
                            </Setter.Value>
                        </Setter>
                    </Style>
                </HierarchicalDataTemplate.ItemContainerStyle>
                <StackPanel Orientation="Horizontal">
                    <Label Content="{Binding Header}" />
                </StackPanel>
            </HierarchicalDataTemplate>
        </Menu.Resources>
    </Menu>
</DockPanel>


除第一次打开菜单后图标消失外,所有功能正常。假设我有两个菜单,每个菜单有一个子项,我打开菜单“A”,子菜单显示图标。然后我打开菜单“B”,子菜单显示图标。再次打开菜单“A”,子菜单不显示图标。菜单“B”中的唯一子菜单显示其图标。

图像
是一个只能有一个父控件的
控件,因此您将看到此行为。在资源中创建
图像
控件,并使用
x:shared
XAML属性设置为非共享:

<Menu DockPanel.Dock="Top" ItemsSource="{Binding MenuItems}">
            <Menu.Resources>
                <SolidColorBrush x:Key="ImageBrush" Color="Blue"/>
                <Image x:Key="menuIcon" x:Shared="false" Source="{Binding Path=Icon, Converter={fa:ImageSourceConverter}, ConverterParameter={StaticResource ImageBrush}}" />
                <HierarchicalDataTemplate DataType="{x:Type local:MenuItemViewModel}" ItemsSource="{Binding Path=ChildMenuItems}">
                    <HierarchicalDataTemplate.ItemContainerStyle>
                        <Style TargetType="MenuItem">
                            <Setter Property="Command" Value="{Binding Command}" />
                            <Setter Property="Icon" Value="{StaticResource menuIcon}" />
                        </Style>
                    </HierarchicalDataTemplate.ItemContainerStyle>
                    <StackPanel Orientation="Horizontal">
                        <Label Content="{Binding Header}" />
                    </StackPanel>
                </HierarchicalDataTemplate>
            </Menu.Resources>
        </Menu>

检查我的样品