Wpf 使用图标绑定的菜单和子菜单
我使用解决方案来绑定我的Wpf 使用图标绑定的菜单和子菜单,wpf,binding,menu,menuitem,ico,Wpf,Binding,Menu,Menuitem,Ico,我使用解决方案来绑定我的菜单,就像在本例中一样,我想知道如何将图标添加到我的菜单项 在我的模型中,我还有一个名为IsSelected的属性,因此我尝试了这种方法: <Menu.ItemTemplate> <HierarchicalDataTemplate DataType="{x:Type Menu:MenuItemViewModel}" ItemsSource="{Binding Path=MenuItems}"> <StackPanel
菜单
,就像在本例中一样,我想知道如何将图标
添加到我的菜单项
在我的模型中,我还有一个名为IsSelected
的属性,因此我尝试了这种方法:
<Menu.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type Menu:MenuItemViewModel}" ItemsSource="{Binding Path=MenuItems}">
<StackPanel Orientation="Horizontal">
<Image Source="pack://application:,,,/Resources/checked_lightslategray.ico"
Width="12"
Height="12"
Margin="0,0,0,0">
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="False">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<TextBlock Text="{Binding Description}" Margin="10,0,0,0"/>
</StackPanel>
</HierarchicalDataTemplate>
</Menu.ItemTemplate>
在“图像样式”触发器上,您已将“图像可见性”设置为“折叠”,这将释放图像所需的空间,当没有可见图像时,内容将向左移动 有两种方法可以克服这一问题 选项1: 与其将可见性设置为折叠,不如将可见性设置为隐藏
<Menu.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type Menu:MenuItemViewModel}" ItemsSource="{Binding Path=MenuItems}">
<StackPanel Orientation="Horizontal">
<Image Source="pack://application:,,,/Resources/checked_lightslategray.ico"
Width="12"
Height="12"
Margin="0,0,0,0">
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="False">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<TextBlock Text="{Binding Description}" Margin="10,0,0,0"/>
</StackPanel>
</HierarchicalDataTemplate>
</Menu.ItemTemplate>
选项2:
-使用标题属性定义描述
-用于定义您的图像
<HierarchicalDataTemplate ItemsSource="{Binding Path=MenuItems}">
<MenuItem Header="{Binding Header}" ItemsSource="{Binding Path=MenuItems}" FontWeight="Bold">
<MenuItem.Icon>
<Image Source="pack://application:,,,/Resources/checked_lightslategray.ico">
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="False">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</MenuItem.Icon>
<MenuItem.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</MenuItem.ItemsPanel>
</MenuItem>
</HierarchicalDataTemplate>
在“图像样式”触发器上,您已将“图像可见性”设置为“折叠”,这将释放图像所需的空间,当没有图像可见时,内容将向左移动 有两种方法可以克服这一问题 选项1: 与其将可见性设置为折叠,不如将可见性设置为隐藏
<Menu.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type Menu:MenuItemViewModel}" ItemsSource="{Binding Path=MenuItems}">
<StackPanel Orientation="Horizontal">
<Image Source="pack://application:,,,/Resources/checked_lightslategray.ico"
Width="12"
Height="12"
Margin="0,0,0,0">
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="False">
<Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<TextBlock Text="{Binding Description}" Margin="10,0,0,0"/>
</StackPanel>
</HierarchicalDataTemplate>
</Menu.ItemTemplate>
选项2:
-使用标题属性定义描述
-用于定义您的图像
<HierarchicalDataTemplate ItemsSource="{Binding Path=MenuItems}">
<MenuItem Header="{Binding Header}" ItemsSource="{Binding Path=MenuItems}" FontWeight="Bold">
<MenuItem.Icon>
<Image Source="pack://application:,,,/Resources/checked_lightslategray.ico">
<Image.Style>
<Style TargetType="Image">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsSelected}" Value="False">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</MenuItem.Icon>
<MenuItem.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</MenuItem.ItemsPanel>
</MenuItem>
</HierarchicalDataTemplate>
将其放入您的
菜单。参考资料
并从堆栈面板
中删除图像
:
<Menu.Resources>
<Image x:Key="img" x:Shared="false" Source="pack://application:,,,/Resources/checked_lightslategray.ico"/>
<Style TargetType="MenuItem">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="true">
<Setter Property="Icon" Value="{StaticResource img}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Menu.Resources>
将其放入您的
菜单。参考资料
并从堆栈面板
中删除图像
:
<Menu.Resources>
<Image x:Key="img" x:Shared="false" Source="pack://application:,,,/Resources/checked_lightslategray.ico"/>
<Style TargetType="MenuItem">
<Style.Triggers>
<DataTrigger Binding="{Binding IsSelected}" Value="true">
<Setter Property="Icon" Value="{StaticResource img}"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Menu.Resources>
是否可以将图像定位在图标应该放置的左侧?您是否尝试过添加图像路径而不是添加的图标?因为我使用的是样式,我认为需要添加菜单。我尝试在样式中添加资源,但遗憾的是,我不知道在哪里,请查看我的更新,我添加了我正在使用的样式,你能告诉我我需要把这个菜单放在哪里吗?资源代码?你应该添加菜单。资源就在第二行的标签下面。有没有可能把图像放在左边图标应该放的地方?你有没有尝试过添加图像的路径而不是你添加的图标?因为我正在使用样式,我认为需要添加图标菜单。资源进入我的风格,我尝试这样做,但不幸的是我不知道在哪里,请查看我的更新,我添加了我正在使用的风格,你能告诉我我需要把这个菜单放在哪里吗?资源代码?你应该添加菜单。资源就在第二行的标签下面。因为我使用的是样式,我认为需要添加菜单。资源到我的样式中,我尝试这样做,但不幸的是我不知道在哪里,请查看我的更新,我添加了我正在使用的样式,你能告诉我我需要在哪里放置你的代码吗?因为我使用的是样式,我认为需要添加菜单。我尝试将资源添加到我的样式中,但不幸的是我不知道在哪里,请查看我的更新,我添加了我使用的样式,你能告诉我我需要在哪里放置你的代码吗?