Home > Enterprise >  Cannot find resource inside TabControl
Cannot find resource inside TabControl

Time:09-20

I have this TabControl

    <TabControl
        x:Name="TabControl"
        ItemTemplate="{StaticResource MyTemplate}">
        <TabControl.Resources>
            <DataTemplate x:Key="MyTemplate">
                <TextBlock
                    Width="80"
                    Height="25"
                    FontWeight="Bold"
                    Text="{Binding Header}" />
            </DataTemplate>
            <DataTemplate DataType="{x:Type objects:LivingBeing}">
                ...
            </DataTemplate>
            <DataTemplate DataType="{x:Type objects:Thing}">
                ...
            </DataTemplate>
        </TabControl.Resources>
    </TabControl>

I set TabControl.ItemsSource = list; and The parent of each object in this list has Header variable and I want to programmatically set the title of each tab but it gives me error: "Cannot find resource named 'MyTemplate'. Resource names are case sensitive."

But the spelling is correct, how to fix this please?

CodePudding user response:

You should define the StaticResource before the control, not inside it!

Or use DynamicResource

Replace

ItemTemplate="{StaticResource MyTemplate}"

With

ItemTemplate="{DynamicResource MyTemplate}"

Note: For better performance, better to avoid DynamicResource wherever possible, so if there is no reason to use DynamicResource, go and define the resource for TabControl in one of its parents, for example:

<UserControl>

    <UserControl.Resources>
        <DataTemplate x:Key="MyTemplate">
                    <TextBlock
                        Width="80"
                        Height="25"
                        FontWeight="Bold"
                        Text="{Binding Header}" />
                </DataTemplate>
    </UserControl.Resources>

    <TabControl
        x:Name="TabControl"
        ItemTemplate="{StaticResource MyTemplate}">
        <TabControl.Resources>
            <DataTemplate DataType="{x:Type objects:LivingBeing}">
                ...
            </DataTemplate>
            <DataTemplate DataType="{x:Type objects:Thing}">
                ...
            </DataTemplate>
        </TabControl.Resources>
    </TabControl>

</UserControl>

To know more, Read this on StaticResource vs. DynamicResource.

  •  Tags:  
  • wpf
  • Related