仍然在WPF,主题,派生等方面学习这些东西
我理解“Themes \ Generic.xaml”的基础知识,然后设置应用程序的app.xaml文件,以包含指向相关主题的资源字典。
所以,从应用程序项目的角度来看,这很好。现在,从类库/ dll文件怎么样。我有一个DLL项目,我想用它作为我项目中所有控件的基础。在那里,我有Themes / Generic.xaml,并编写了一些基础知识来确认视觉设计实现(最初确认没问题,在App / exe项目下进行测试)。
现在,我想在实际应用之前将这个主题放在一个水平上。同样,这是基线。现在,我添加了第二个自定义分组控件库(例如,用户控件用于地址信息...多个地址行,城市,州,邮政编码,标签等)。我希望第二个库能够引用带有主题的第一个库,因此我可以在设计时看到它的外观(对齐,颜色,字体等)。
我应该在什么/哪里让一个DLL知道作为第一个DLL基础的合并字典。希望这是有道理的。
- 编辑 - 澄清
头等舱......“MyThemeLibrary”编译成.dll 在这个dll中是“/Themes/MyTheme.xaml”的路径/文件
正如第一个答案所建议的那样,如果我在第一个库中有一个资源字典,我可以在其他任何我将从中派生出来的地方引用它。所以,我有
<ResourceDictionary x:Name="MyGenericTheme"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/Themes/MyTheme.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
第二类库......“SecondLevel”编译成.dll 在这里,我有一个用户控件,我想将列/行,标签和文本框控件放入网格。我希望控件能够尊重第一个dll的“MyTheme.xaml”中定义的颜色,字体,大小和对齐。
<UserControl x:Class="SecondLevel.multipleControlContainer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Label Content="Something"
Grid.Row="0" Grid.Column="0" />
<TextBox Text="Testing" Grid.Row="1" Grid.Column="1" />
</Grid>
</UserControl>
那么,我应该如何/我应该做什么/声明,将资源字典从第一个库包含到第二个库中。
答案 0 :(得分:1)
引用您的dll,如果您知道主题的位置,则可以执行此操作
<Application x:Class="My.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!-- Common base theme -->
<ResourceDictionary Source="pack://application:,,,/Your.Base.Dll;component/YourResDictionary/YourTheme.xaml" />
<!-- here comes your custom theme -->
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
在App.xaml中执行此操作
澄清之后编辑(查看评论)
<UserControl x:Class="SecondLevel.multipleControlContainer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<!-- Common base theme -->
<ResourceDictionary Source="pack://application:,,,/Your.Base.Dll;component/YourResDictionaryFolder/MyGenericTheme.xaml" />
<!-- Custom theme -->
<ResourceDictionary Source="pack://application:,,,/Another.Dll;component/AnotherResDictionaryFolder/MyCustomTheme.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<!-- all controls in this usercontrol respect the styles in MyGenericTheme.xaml"
if you use implicite styles-->
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Label Content="Something"
Grid.Row="0"
Grid.Column="0" />
<TextBox Text="Testing"
Grid.Row="1"
Grid.Column="1" />
<!-- if you use explicit styles then you must do this -->
<TextBox Style="{StaticResource myTextBoxStyle}"
Text="Testing"
Grid.Row="1"
Grid.Column="1" />
</Grid>
</UserControl>