创建staticresource的多个副本

Tru*_*der 5 c# wpf xaml staticresource

我有一个项目控件模板,如下所示.我需要为模板中的每个项目单独设置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>
Run Code Online (Sandbox Code Playgroud)

Mic*_*ael 8

要在每次请求时返回静态资源的新实例,您可以使用该x:Shared属性.这在MSDN上有记录.根据我对此属性的体验,在尝试设置它时,您将无法获得Intellisense支持.在您的情况下,需要ColorProvider在Resources部分中设置属性,如下所示.

<ContentPresenter Content="{Binding }" ContentTemplateSelector="{StaticResource chartSelector}">
  <ContentPresenter.Resources>
    <v:ColorProvider x:Key="colorProvider" x:Shared=false />
  </ContentPresenter.Resources>
</ContentPresenter>
Run Code Online (Sandbox Code Playgroud)