gpt4 book ai didi

wpf - 如何将自定义 Controltemplate 设置为整个应用程序的默认值?

转载 作者:行者123 更新时间:2023-12-04 02:13:43 38 4
gpt4 key购买 nike

我已决定尝试自定义 Menu 和 MenuItem 的默认控件模板的许多方面。在 Visual Studio 中,我选择了菜单,在属性面板中找到了"template",然后选择了“转换为新资源...”。

我为 MenuItem 做了同样的事情。然后,为了测试,我将 MenuItem SubMenuBorder 颜色更改为红色。此时,我有一个包含两个 ControlTemplate 的资源字典和一个如下所示的菜单:

<Menu Template="{DynamicResource CustomMenuControlTemplate}">
<MenuItem Header="File" Template="{DynamicResource CustomMenuItemControlTemplate}">
<MenuItem Header="Test 1" />
<MenuItem Header="Test 2">
<MenuItem Header="Subtest 1" />
<MenuItem Header="Subtest 2" />
<MenuItem Header="Subtest 3" />
</MenuItem>
<MenuItem Header="Test 3" />
</MenuItem>
</Menu>

Menu 1

问题是红色边框只会出现在我将模板显式设置为修改后的 CustomMenuItemControlTemplate 的 MenuItems 上。如果我想在所有菜单项上使用我的模板,我必须包括:
Template="{DynamicResource CustomMenuItemControlTemplate}"

...在我整个应用程序中的每个 MenuItem 上。

所以,接下来我想我应该有一个适用于所有 MenuItem 的样式,并使用 setter 来设置我的默认模板:
<Style TargetType="MenuItem">
<Setter Property="Template" Value="{DynamicResource CustomMenuItemControlTemplate}" />
</Style>

这可行(注意所有子菜单上的红色边框),但由于某种原因,它极大地改变了菜单的外观:

Menu 2

在那个 setter 中,我尝试同时使用 DynamicResource 和 StaticResource 绑定(bind),结果相同。

所以,我的主要问题是:有没有办法使用自定义 ControlTemplate 作为默认值,这样我就不必在每个控件上显式设置它?第二个问题:为什么使用样式设置模板属性会导致外观发生如此巨大的变化?

最佳答案

所以不能放一个没有key的控件模板,key不能是{x:Type ...}在 WPF 中。

但是你可以放一个Style没有键,该样式将是默认样式。 -- 在那种风格下,你可以设置控制模板。

<Style TargetType="{x:Type MenuItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type MenuItem}">
<!-- Insert Control Template Here -->
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

关于wpf - 如何将自定义 Controltemplate 设置为整个应用程序的默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35900886/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com