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