none
DataTrigger in Style RRS feed

  • Frage

  • Hallo!

    Ich habe einer Eigenschaft (Tag), die in einem DataTemplate im Trigger verwendet wird, einen festen Wert zugeordnet.

    Trotzdem wird dieser nicht "verwendet":

    <TabControl VerticalAlignment="Bottom">
        <TabControl.Resources>
            <Style TargetType="{x:Type TabItem}" x:Key="StyleTabItemNVD">
                <Setter Property="HeaderTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <Border x:Name="grid" Background="LightGray">
                                <ContentPresenter>
                                    <ContentPresenter.Content>
                                        <TextBlock Margin="4,2" FontSize="12" Text="{TemplateBinding Content}" />
                                    </ContentPresenter.Content>
                                </ContentPresenter>
                            </Border>
                            <DataTemplate.Triggers>
                                <DataTrigger Binding="{Binding Path=Tag, RelativeSource={RelativeSource Self}}" Value="1">
                                    <Setter TargetName="grid" Property="Background" Value="Red"/>
                                </DataTrigger>
                                <DataTrigger Binding="{Binding Path=Tag, RelativeSource={RelativeSource Self}}" Value="0">
                                    <Setter TargetName="grid" Property="Background" Value="Blue"/>
                                </DataTrigger>
                                <DataTrigger Binding="{Binding Path=Tag, RelativeSource={RelativeSource Self}}" Value="{x:Null}">
                                    <Setter TargetName="grid" Property="Background" Value="Green"/>
                                </DataTrigger>
                            </DataTemplate.Triggers>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </TabControl.Resources>
        <TabItem Name="ti" Header="TabItemHeader" Tag="1" Style="{StaticResource StyleTabItemNVD}">
            <TextBlock Text="{Binding ElementName=ti, Path=Tag}" />
        </TabItem>
    </TabControl>

    Der TabItem-Header müsste doch rot sein, da die Tag-Eigenschaft des TabItem 1 ist.

    Siehe TextBlock im TabItem und Bild!!!


    • Bearbeitet perlfred Mittwoch, 21. März 2018 11:30
    Mittwoch, 21. März 2018 11:28

Antworten

  • Hallo!

    Der Bezug des Bindings im DataTrigger des DataTemplate's war falsch!

    Ich dachte, dass der Bezug: RelativeSource Self auf das TabItem verweist, das den Style benutzt, scheint aber nicht so zu sein.

    Wenn ich den Bezug auf das übergeordnete TabControl setze, reagiert der DataTrigger wie gewünscht:

    Relativer Bezug auf TabControl:

    <DataTrigger Binding="{Binding Path=Tag, RelativeSource={RelativeSource FindAncestor, AncestorType=TabControl}}" Value="1">
        <Setter TargetName="grid" Property="Background" Value="Red"/>
    </DataTrigger>
    


    Tag des TabControl auf 1 gesetzt:

    <TabControl Tag="1">
    

    :-)

    • Als Antwort markiert perlfred Mittwoch, 21. März 2018 13:52
    Mittwoch, 21. März 2018 13:51