【发布时间】:2026-01-20 02:35:01
【问题描述】:
我正在尝试在后面的窗口代码中实例化一个控件(用于框架导航)。不幸的是,它没有应用默认样式。
我希望当一个控件第一次渲染时,渲染器会将控件的样式/模板设置为任一(显式提供的 -> 资源中提供的默认选项 -> null)。
我对如何应用默认样式的心理模型是否错误?真的是这样吗
class Whatever
{
int value = 5;
}
是真正的语法糖
class Whatever
{
public Whatever()
{
this.value = 5;
}
int value;
}
因此样式是在编译时设置的?
这可能是我如何访问控件的样式和模板的问题(不太可能,因为我可以在我的主窗口上控制它的类型并且它具有默认样式)?
MainWindow.xaml
<Window>
<Window.Resources>
<ResourceDictionary>
</ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="DataLogPage/Themes.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<!-- Data here... -->
</Window>
DatalogPage/Themes.xaml
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Themes/Styles/DefaultStyle.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
DatalogPage/Themes/Styles/DefaultStyle.xaml
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../Templates/DefaultTemplate.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style TargetType="this:DataLog">
<Setter Property="Template"
Value="{StaticResource DefaultTemplateForDataLog}" />
</Style>
</ResourceDictionary>
DatalogPage/Themes/Templates/DefaultTemplate.xaml
<ResourceDictionary>
<ControlTemplate x:Key="DefaultTemplateForDataLog"
TargetType="this:DataLog">
<!-- Data here... -->
</ControlTemplate>
</ResourceDictionary>
MainWindow.xaml.cs(我在后面的代码中创建控件)
private void currentContext_ContextChangeRequested()
{
//Other bits of logic for context switching
//User wants to go to the Data Log Page
this.MainFrame.Navigate(new DataLogPage.DataLog());
return;
}
重申:
问题: 在后面的代码中创建的控件没有它的默认样式。
关于为什么会这样的可能想法:
1) 我的默认样式如何应用的用户模型是错误的,我必须明确设置它。
2)我可能引用的样式不正确。
如果我必须明确设置样式/模板,是否有两全其美的方法,我可以在 MainWindow 的 xaml 中制作一些我可以像这样以编程方式引用的东西:new DataLogPage.DataLog(){Style = this.DataLogStyle};?
【问题讨论】:
标签: wpf wpf-controls