大佬教程收集整理的这篇文章主要介绍了WPF 菜单 - 允许在禁用的菜单项中启用特定控件,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个绑定到模型集合的菜单。 MenuItem 命令绑定到模型命令。
我重新定义了 SubMenuItem 控件模板以在其中添加一个 Togglebutton。 此 Togglebutton 允许用户将 MenuItem 指定为“收藏夹”。我希望始终启用此 Togglebutton。
<ControlTemplate x:Key="{x:Static MenuItem.SubmenuItemTemplateKey}" targettype="{x:Type MenuItem}">
<GrID x:name="PART_Conteneur" BACkground="transparent">
<GrID.columnDeFinitions>
<columnDeFinition WIDth="auto" SharedSizeGroup="Star" />
<columnDeFinition WIDth="*" />
</GrID.columnDeFinitions>
<Togglebutton x:name="PART_Starbutton" Style="{Dynamicresource VerticalToolbarMenuStarTogglebuttonStylE}" VerticalAlignment="Center" margin="2,0" />
<border x:name="border" borderThickness="1" GrID.column="1" padding="0,2,2">
<GrID>
<GrID.columnDeFinitions>
<columnDeFinition WIDth="auto" SharedSizeGroup="Icon" />
<columnDeFinition WIDth="*" />
<columnDeFinition WIDth="auto" SharedSizeGroup="Shortcut" />
<columnDeFinition WIDth="13" />
</GrID.columnDeFinitions>
<ContentPresenter x:name="Icon" margin="6,6,0" VerticalAlignment="Center" GrID.column="0" Contentsource="Icon" WIDth="20" />
<ContentPresenter x:name="headerHost" GrID.column="1" Contentsource="header" RecognizesAccessKey="True" VerticalAlignment="Center" />
<TextBlock x:name="inputGestureText" GrID.column="2" Text="{TemplateBinding inputGestureText}" margin="5,2" DockPanel.Dock="Right" />
</GrID>
</border>
</GrID>
<ControlTemplate.triggers>
<trigger Property="buttonBase.Command" Value="{x:Null}" />
<trigger Property="Icon" Value="{x:Null}">
<Setter Targetname="Icon" Property="Visibility" Value="HIDden" />
</trigger>
<trigger Property="IsHighlighted" Value="true">
<Setter Property="BACkground" Targetname="border" Value="{Dynamicresource ItemSELEctedBrushKey}" />
<Setter Property="borderBrush" Targetname="border">
<Setter.Value>
<linearGradIEntBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradIEntStop color="#FF888888" Offset="0" />
<GradIEntStop color="transparent" Offset="1" />
</linearGradIEntBrush>
</Setter.Value>
</Setter>
</trigger>
<trigger Property="IsEnabled" Value="false">
<Setter Property="Opacity" Value="{Dynamicresource disabLeopacity}" />
</trigger>
</ControlTemplate.triggers>
</ControlTemplate>
当 MenuItem 被禁用(Command CanExecute 返回 false)时,Togglebutton 也被禁用。
如何只启用 Togglebutton?
编辑:
我设法通过在包含 Togglebuttons 的 topLevelheader 模板弹出窗口中添加一个新的 ItemsControl 来满足我的需求:
<ControlTemplate x:Key="VerticalToolbarMenutopLevelheaderTemplate" targettype="{x:Type MenuItem}">
<border x:name="border">
<GrID>
<ContentPresenter margin="6,3,20,3" Contentsource="header" RecognizesAccessKey="True" HorizontalAlignment="Right" />
<Popup x:name="Popup" Placement="Bottom" IsOpen="{TemplateBinding IsSubmenuOpen}" AllowsTransparency="True" Focusable="false" PopupAnimation="Fade" StaysOpen="True">
<border x:name="Submenuborder" SnapsToDevicePixels="True" borderThickness="1" BACkground="{Dynamicresource ToolbarPopupBACkgroundBrushKey}"
borderBrush="{Dynamicresource PopupborderBrushKey}">
<ScrollVIEwer CanContentScroll="True" VerticalScrollbarVisibility="auto">
<GrID>
<GrID.columnDeFinitions>
<columnDeFinition />
<columnDeFinition WIDth="*" />
</GrID.columnDeFinitions>
<ItemsControl Itemssource="{Binding }">
<ItemsControl.ItemTemplate>
<DataTemplate>
<GrID Height="25">
<Togglebutton x:name="PART_Starbutton" Style="{Dynamicresource VerticalToolbarMenuStarTogglebuttonStylE}" VerticalAlignment="Center" margin="2,0" />
</GrID>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Cycle" GrID.column="1" />
</GrID>
</ScrollVIEwer>
</border>
</Popup>
</GrID>
</border>
<ControlTemplate.triggers>
<trigger Property="IsSuspendingPopupAnimation" Value="true">
<Setter Targetname="Popup" Property="PopupAnimation" Value="None" />
</trigger>
<trigger Property="IsHighlighted" Value="true">
<Setter Targetname="border" Property="borderBrush" Value="transparent" />
<Setter Property="BACkground" Targetname="border" Value="{Dynamicresource ItemSELEctedBrushKey}" />
</trigger>
<trigger sourcename="Popup" Property="AllowsTransparency" Value="True">
<Setter Targetname="Submenuborder" Property="CornerRadius" Value="0,4,4" />
<Setter Targetname="Submenuborder" Property="padding" Value="0,3" />
</trigger>
<trigger Property="IsEnabled" Value="false">
<Setter Property="Opacity" Value="{Dynamicresource disabLeopacity}" />
</trigger>
</ControlTemplate.triggers>
</ControlTemplate>
不,你不能这样做。 当 CanExecute 返回 false 时,IsEnabled 属性采用相同的值。 IsEnabled = false 不仅禁用元素本身,还禁用嵌套在其中的所有内容。 此行为在 UIElement 中定义且无法更改。
以上是大佬教程为你收集整理的WPF 菜单 - 允许在禁用的菜单项中启用特定控件全部内容,希望文章能够帮你解决WPF 菜单 - 允许在禁用的菜单项中启用特定控件所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。