更新
我很尴尬地说我犯了一个错误。错误是我的主题没有设置我用来测试的元素的样式,所以当然我没有看到应用的样式。
但是,回答这个问题的答案确实显示了如何将资源从一个UserControl显式设置为另一个...这很有趣。
当我按照下面描述的方式在应用程序上设置资源时,它确实在生成的应用程序中隐式设置了所有用户控件主题。
我正在使用一个主题,在我的主Application类上设置为ResourceDictionary。我的主窗口我猜是隐含地使用这个主题来塑造自己。
<Application>
<Application.Resources>
<ResourceDictionary Source="Themes/ExpressionDark.xaml" />
以下评论有误,所有内容都是隐式设置的
但是,当我显示一个对话框时,它没有被设置样式。
DialogBox dialog = new DialogBox();
dialog.ShowDialog();
如果没有在DialogBox的XAML中明确指定样式,是否有某种方法可以隐式执行此操作?
修改
我尝试通过以下方式设置资源。他们没有工作。
Window main = App.Current.Windows[0];
dialog.Resources = main.Resources;
dialog.Owner = main;
还尝试从主应用程序设置... ...这是定义原始资源的位置。
dialog.Resources = App.Current.Resources;
答案 0 :(得分:3)
您可以按如下方式实施:
dialog.Resources.MergedDictionaries.Add( this.Resources.MergedDictionaries[0] );
另一种可能性是从app加载它们(但我不喜欢):
ResourceDictionary dict = Application.LoadComponent( new Uri( "<library>;component/Themes/<theme>.xaml", UriKind.Relative ) ) as ResourceDictionary;
dialog.Resources.MergedDictionaries.Add( dict );
答案 1 :(得分:1)
如果您不需要指定对话框特定资源,您可以以这种或那种方式传输资源,或者只是将对话框的资源设置为主窗口的资源:
public Dialogue(Window owner)
{
this.InitializeComponent();
Owner = owner;
Resources = Owner.Resources;
}
(因为这是一个对话我也设置了Owner
属性)