我有一个项目控件模板,如下所示。我需要为模板中的每个项目单独设置colorProvider实例。 items控件中的每个项目都需要Color Provider的单独实例,具体取决于它绑定的项目。 如何创建staticresource的多个副本,以便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 :(得分:6)
要在每次请求时返回静态资源的新实例,您可以使用x:Shared
属性。这在MSDN上有记录。根据我对此属性的体验,在尝试设置时,不会获得Intellisense支持。在您的情况下,需要在参考资料部分的ColorProvider
上设置该属性,如下所示。
<ContentPresenter Content="{Binding }" ContentTemplateSelector="{StaticResource chartSelector}">
<ContentPresenter.Resources>
<v:ColorProvider x:Key="colorProvider" x:Shared=false />
</ContentPresenter.Resources>
</ContentPresenter>
答案 1 :(得分:0)
如果资源值因数据而异,则应将Binding与将返回Color的值转换器结合使用。