WPF custom style, pass binding parameter

I have such style in WPF

 <Style x:Key="SubTabItem" TargetType="{x:Type TabItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type TabItem}">
                    <ControlTemplate.Triggers>
                        <DataTrigger Binding="{Binding Path=IsSelected}" Value="false">
                            <Setter Property="TabItem.IsEnabled" Value="false" />
                        </DataTrigger>
                 </ControlTemplate.Triggers>

I want to use it with my TabItem in such way

  <TabControl x:Name="configControl" Padding="0" Background="{x:Null}" BorderThickness="0" FocusVisualStyle= "{x:Null}" >

            <TabItem x:Name="MyName" Header="My Name" Visibility="Visible" Style="{DynamicResource SubTabItem}">
            </TabItem>

        </TabControl>

I assign configControl.DataContext in codebehind.

When i use it in such way(with exact binding in ControlTemplate datatrigger) - it works. But I want to PASS the different binding path to the style, when using it in target item. As i understand i can do it through TemplateBinding but i can't find how?

I can do several same styles with each binding defined, but i want to find a way how to simplify it, so i can write smth like this:

 <TabItem x:Name="MyName" Header="My Name" Visibility="Visible" Style="{DynamicResource SubTabItem}" Binding={Binding Path=IsSelected}>
        </TabItem>

 <TabItem x:Name="MyName2" Header="My Name2" Visibility="Visible" Style="{DynamicResource SubTabItem}" Binding={Binding Path=IsThisSelected}>
        </TabItem>

so it take this paths and decide if to enable or disable each of this tab item based on passed value.

1
задан Andriy Kizym 17 August 2010 в 18:55
поделиться

1 ответ

Если я правильно понимаю ваш вопрос, вы могли бы сделать это с помощью Триггеров в вашем стиле

Примерно так:

<Style.Triggers>
    <DataTrigger Binding="{Binding TemplateNameProperty}" Value="Template1">
        <Setter Property="Template" Value="{StaticResource Template1}" />
    </DataTrigger>
    <DataTrigger Binding="{Binding TemplateNameProperty}" Value="Template2">
        <Setter Property="Template" Value="{StaticResource Template2}" />
    </DataTrigger>
</Style.Triggers>
2
ответ дан 2 September 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: