我的window.xaml
中有以下一组代码:
<Window x:Class="MD.UI.EntryPoint.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:UICore="http://schemas.MasterData.io/Core/"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/MD.UI.Core;component/Themes/Generic.xaml"></ResourceDictionary>
<!--<ResourceDictionary Source="{DynamicResource }"></ResourceDictionary>-->
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<Button Name="btnShow" Content="Show" HorizontalAlignment="Left" Margin="329,172,0,0" VerticalAlignment="Top" Width="83" Height="22" Click="btnShow_Click"/>
</Grid>
</Window>
如果您熟悉XAML,那么您可以理解Generic.xaml
已在单独的项目中定义(dll
),此项目中引用了MD.UI.Core
名称Generic.xaml
一切正常。表示MD.UI.Core
主题正常工作。
http://schemas.MasterData.io/Core/
此处还有XmlnsDefinition
xmlns:UICore="http://schemas.MasterData.io/Core/"
用作:
xmlns:UICore
所以,虽然我已经在window.xaml
内定义了/MD.UI.Core;component/Themes/Generic.xaml
,但我还是不想再使用xmlns
了。我想要做的是,使用ResourceDirectory.Source
我想绑定<ResourceDictionary Source="{DynamicResource }"></ResourceDictionary>
属性,如:
UICore
实际上我想直接使用<ResourceDictionary Source="{DynamicResource UICore:component/Themes/Generic.xaml}"></ResourceDictionary>
引用,如
something
或Binding
,但使用XAML markup
表达Char.IsNumber
。
我不知道。如何定义上述?
你能帮我吗?
答案 0 :(得分:0)
我的理解是,您要做的是能够动态选择主题(资源字典)。我通常在C#中这样做。例如,让我们假设我们有2个主题。第一个嵌入在当前组件中,第二个嵌入在外部组件中。让我们从 External.dll 中将它们称为 Internal.xaml 和 External.xaml 。现在我们可以编写以下方法:
private static void SetStyle(bool useInternal)
{
var res = Application.Current.Resources;
res.MergedDictionaries.Clear();
if (useInternal)
res.MergedDictionaries.Add(new ResourceDictionary()
{
Source = new Uri("pack://application:,,,/Internal.xaml")
});
else
res.MergedDictionaries.Add(new ResourceDictionary()
{
Source = new Uri("pack://application:,,,/External;component/External.xaml")
});
}
此方法已简化,因为假设MergedDictionaries
集合中只能有一个项目。但是,它显示了一个想法。实际上,您可以相应地在MergedDictionaries
集合中添加/删除资源。
还值得指出上面的SetStyle
方法使用全局资源字典。如果需要,您可以对本地词典执行相同操作,例如对于特定窗口甚至控件。