ResourceDictionary组织

时间:2012-07-03 20:15:55

标签: wpf xaml resources resourcedictionary code-organization

我知道有关此主题的两个不错的在线资源,XAML Guidelinesthis less complete one

我还是不太明白!

例如,假设我有两个项目:

  1. Wpf.ControlLibrary.proj
  2. Wpf.App.proj
  3. 在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>
    

    好的,你的问题是什么?

    1. 鉴于DataTemplate需要“ControlLibrary.ResourceLibrary”或抛出错误,App.Resources中有什么用?我认为应用资源应该为应用提供所有资源吗?
    2. 我如何更好地组织此处显示的资源,或者这是一个不错的方法?我错过了关于这个主题的任何其他好的链接?大多数非平凡的项目是否需要一些代码才能获得某种共享资源库?
    3. 干杯,
      Berryl

0 个答案:

没有答案