WPF: Find Resources from UserControl within DataTemplateSelector class

后端 未结 1 744
既然无缘
既然无缘 2021-02-09 23:37

I know there is this thread: How to find a resource in a UserControl from a DataTemplateSelector class in WPF?

asking the same.

BUT... I am not satisfied with th

相关标签:
1条回答
  • 2021-02-10 00:23

    Yes, you can cast the container parameter to FrameworkElement and call FindResource to do a resource lookup starting at the ContentPresenter. For example:

    Code:

    public class MySelector
        : DataTemplateSelector
    {
        public override DataTemplate SelectTemplate
            (object item, DependencyObject container)
        {
            // Determine the resource key to use
            var key = item.ToString() == "a" ? "one" : "two";
            // Find the resource starting from the container
            return ((FrameworkElement)container).FindResource(key) as DataTemplate;
        }
    }
    

    XAML:

    <UserControl
        x:Class="WpfApplication1.UserControl1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        >
        <UserControl.Resources>
            <DataTemplate x:Key="one">
                <TextBlock>Template One</TextBlock>
            </DataTemplate>
            <DataTemplate x:Key="two">
                <TextBlock>Template Two</TextBlock>
            </DataTemplate>
            <local:MySelector x:Key="MySelector"/>
        </UserControl.Resources>
        <StackPanel>
            <ContentPresenter
                ContentTemplateSelector="{StaticResource MySelector}"
                Content="a"/>
            <ContentPresenter
                ContentTemplateSelector="{StaticResource MySelector}"
                Content="b"/>
        </StackPanel>
    </UserControl>
    
    0 讨论(0)
提交回复
热议问题