2016-02-19 90 views
2

我有一个如下所示的项目控件的模板。我需要为模板中的每个项目分别使用colorProvider实例。项目控件中的每个项目都需要颜色提供者的单独实例,具体取决于它绑定的项目。 如何创建静态资源的多个副本,以便静态资源仅适用于该项目。创建staticresource的多个副本

<ItemsControl x:Name="itemsControl" ItemsSource="{Binding DataList}"> 
      <ItemsControl.ItemsPanel> 
       <ItemsPanelTemplate> 
        <StackPanel Orientation="Vertical"/> 
       </ItemsPanelTemplate> 
      </ItemsControl.ItemsPanel> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Grid MinHeight="250"> 
         <ContentPresenter Content="{Binding }" ContentTemplateSelector="{StaticResource chartSelector}"> 
          <ContentPresenter.Resources> 
           <v:ColorProvider x:Key="colorProvider"/> 
          </ContentPresenter.Resources> 
         </ContentPresenter> 
        </Grid> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
+0

colorProvider资源永远不会在你的代码中使用。 请描述你打算如何使用这个资源。 –

+0

它是从将在contentpresenter中加载的模板引用的。然而,作为一种解决方法,我设法使用控件标记对象来获取返回应该初始化colorprovider的数据的引用。 – TrustyCoder

+0

听起来像[x:Shared =“False”](https://msdn.microsoft.com/en-us/library/aa970778%28v=vs.110%29.aspx)的情况。 – icebat

回答

3

要在每次请求时返回静态资源的新实例,可以使用x:Shared属性。这记录在MSDN上。根据我对此属性的体验,您将在试图设置它时获得Intellisense支持,而不是而不是。在你的情况下,这个属性需要在你的参考资料部分的ColorProvider上设置,如下所示。

<ContentPresenter Content="{Binding }" ContentTemplateSelector="{StaticResource chartSelector}"> 
    <ContentPresenter.Resources> 
    <v:ColorProvider x:Key="colorProvider" x:Shared=false /> 
    </ContentPresenter.Resources> 
</ContentPresenter> 
+0

非常好!它的工作原理,你对智能感知也是正确的! – florien

0

如果资源值在数据上有所不同,您应该使用Binding和值转换器一起返回Color。