我知道有两个关于这个主题的不错的在线资源,XAML 指南和这个不太完整的一个。
而且我还是不太明白!
例如,假设我有两个项目:
- Wpf.ControlLibrary.proj
- Wpf.App.proj
在 Wpf 应用程序中,我有三个资源一起工作,形成一种统一的方式,为不同的视图提供错误反馈和关闭。其中两个资源通过 DataTemplate 提供:
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="EditedStateIndicator.xaml" />
<ResourceDictionary Source="CloseCrossToggleButton.xaml" />
</ResourceDictionary.MergedDictionaries>
<DataTemplate x:Key="SatelliteViewClosePanelStyle" >
<StackPanel Orientation="Horizontal">
<Button Style="{StaticResource CloseCrossButtonStyle}" />
<Ellipse Style="{StaticResource EditedStateIndicatorStyle}" />
</StackPanel>
</DataTemplate>
这又在“SatelliteView.ResourceLibrary.xaml”中提供:
<!-- ##Satellite View Library-->
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="SatelliteViewClosePanel.xaml" />
<ResourceDictionary Source="InlineBorder.xaml" />
</ResourceDictionary.MergedDictionaries>
这又在“ControlLibrary.ResourceLibrary.xaml”中提供
<!-- ##Master Control Library reference-->
<ResourceDictionary.MergedDictionaries>
...
<ResourceDictionary Source="CustomControlStyles/SatelliteViewStyles/ResourceLibrary.xaml" />
...
</ResourceDictionary.MergedDictionaries>
然后在 Wpf.App 项目中消费,字面意思是 App.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Wpf.ControlLibrary;component/ResourceLibrary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
应用程序内部是一个视图,它使用了一些也需要访问控件库的内容:
<ResourceDictionary.MergedDictionaries>
Source="pack://application:,,,/SWpf.ControlLibrary;component/ResourceLibrary.xaml" />
</ResourceDictionary.MergedDictionaries>
<DataTemplate x:Key="AvatarEditingControlTemplate">
...
</DataTemplate>
好的,那么你的问题是什么?
- 鉴于 DataTemplate 需要“ControlLibrary.ResourceLibrary”或引发错误,那么在 App.Resources 中提供它有什么好处?我认为应用程序资源应该使应用程序可以使用所有资源?
- 我怎样才能更好地组织这里显示的资源,或者这是一个体面的方法?关于我错过的主题的任何其他好的链接?大多数不平凡的项目是否需要一些代码来获得某种共享资源库?
干杯,
贝里尔