gpt4 book ai didi

wpf - 不应用generic.xaml中的样式

转载 作者:行者123 更新时间:2023-12-03 13:31:30 31 4
gpt4 key购买 nike

我制作了一个类库程序集,在其中创建了自定义控件,并在generic.xaml文件中定义了默认样式。

只要有很多人发布此问题,这似乎是一个非常普遍的问题。
但是,对于我的案子,我找不到任何有用的答案。


generic.xaml位于“主题”文件夹中。
将generix.xaml文件的“构建操作”设置为“页面”。
在我的AssemblyInfo.cs中正确定义了ThemeInfo。


在我的测试应用程序中,如果我将自定义控件程序集中的generic.xaml文件手动合并到应用程序App.xaml文件中,如下所示:

<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/MyControlsAssembly;component/Themes/generic.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>


则自定义控件的主题正确,但是如果我不手动合并generic.xaml,则这些控件将使用默认的Windows主题显示。

您能告诉我我忘记和/或做错了什么吗?

附加信息:


我的ThemeInfo程序集属性定义如下:

[assembly: ThemeInfo(ResourceDictionaryLocation.SourceAssembly, ResourceDictionaryLocation.SourceAssembly)]

(注意:对于ThemeInfo属性的任何参数组合,结果都是相同的)
在主题文件夹中的generic.xaml文件旁边还有两个.xaml文件。
“主题”文件夹中有一个子文件夹,该子文件夹本身包含另一个.xaml文件。

最佳答案

您的自定义控件构造函数中需要以下行:

public class MyCustomControl : Control
{
static MyCustomControl()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(MyCustomControl), new FrameworkPropertyMetadata(typeof(MyCustomControl)));
}
}


然后,如果您在主题文件夹中有一个generic.xaml文件,具有以下示例样式:

<Style TargetType="{x:Type local:MyCustomControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:MyCustomControl}">
<Border>
<Label>Testing...</Label>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>


现在,样式将自动应用,而无需任何额外的合并。

关于wpf - 不应用generic.xaml中的样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11149167/

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