更新时间:2023-12-04 10:22:46
您正在设置图标属性设置为
。现在,只创建一个图片
控制>风格风格的副本,因此,创建
图像只有一个副本
。现在,任何控制可以在同一时间只能有一个父。所以,当它被分配给持续菜单项
,它是从以前的菜单项
控件中删除。为了解决这个问题,可以使用模板
。
而不是标题$ C $的设置C>属性设置
HeaderTemplate中
:
< setter属性= HeaderTemplate中>
< Setter.Value>
<&DataTemplate的GT;
<网格和GT;
< Grid.ColumnDefinitions>
< ColumnDefinition WIDTH =自动/>
< ColumnDefinition WIDTH =*/>
< /Grid.ColumnDefinitions>
<图像Grid.Column =0
来源={绑定路径= IconPath}/>
< TextBlock的Grid.Column =1
文本={结合显示名称}/>
< /网格和GT;
< / DataTemplate中>
< /Setter.Value>
< /二传手>
我不知道是什么属性由您正在使用的控件工具包暴露出来。但是,我敢肯定,他们必须有一个模板属性。
这样做后,就不需要设置图标
的样式属性。
Im getting menuItem icon appearing only on last menuItem. If i snoop the app only last menuItem has image in icon, while if i debug all MenuItems appear to have image in icon. Also if i add submenuItem the icon on menuItem dissapears once i open submenus and the last submenu gets the icon... Any idea? PS: also tooltips on menu item dont work. Im using caliburn micro and fluent ribbon controls.
<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>
You are setting Icon
property to an Image
control in Style
. Now, only one copy of Style
is created and thus, only one copy of Image
is created. Now, any control can have only one parent at a time. So, when it is assigned to last MenuItem
, it is removed from previous MenuItem
controls. To fix this, use Templates
.
Instead of setting Header
property, set 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>
I'm not sure of what properties are exposed by the control toolkit you are using. But, I'm sure they must have a template property.
After doing this, you don't need to set Icon
property in style.