9
votes

Style Datatriggigriggigment en référence au type de contrôle des parents

Sur ma fenêtre Il existe plusieurs contrôles de groupe, chacun contenant une commande de grille. À ces grilles que je veux affronter un style. Mais uniquement à ces grilles qui sont directement dans une boîte de groupe, toutes les autres grilles ne doivent pas être affectées.

J'ai essayé ce qui suit, ce qui ne fonctionne pas comme getType () n'est pas de propriété. P>

<Style TargetType="GroupBox">
    <Setter Property="Tag" Value="blub"/>
 </Style>
<Style TargetType="Grid">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Path=Parent.Tag, RelativeSource={RelativeSource Mode=Self}}" Value="blub">
           <!-- <Setter Property="..." Value="..."/> -->
        </DataTrigger>
    </Style.Triggers>
</Style>


0 commentaires

3 Réponses :


7
votes
<DataTrigger Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GroupBox}}, Path=Tag}" Value="blub">

2 commentaires

Je crains que vous n'ayez trompé à ce sujet. Mon code travaille tout simplement bien. Le mode n'est pas de type BindingMode, mais de type RelativeOrcemode. Je suppose que vous voudriez que vous ayez négligé les accolades à Relativeource = {Mode RelativeVource = auto} qui fait le mode une propriété de RelativeSource et non d'une liaison.


@Peter: Tu as raison. Ce défilement horizontal m'a perturbé et je n'ai pas vraiment remarqué les accolades intérieures qui rend mode propriété de RelativeSource. Merci d'avoir souligné l'erreur! :-)



1
votes

Utilisez le code suivant:

<tt:IsTypeFoundConverter x:Key="isTypeFoundConverter"/>

<Style TargetType="Grid">
    <Style.Triggers>
        <DataTrigger Binding={Binding RelativeSource={RelativeSource Self}, Converter={StaticResource isTypeFoundConverter}, ConverterParameter={x:Type GroupBox}}" Value="true">
           <!-- <Setter Property="..." Value="..."/> -->
        </DataTrigger>
    </Style.Triggers>
</Style>


0 commentaires

4
votes

Ceci a fonctionné pour moi: xxx

Il vous permet de définir le style basé sur le type parent sans avoir à recourir à la balise qui devrait vraiment être utilisée par le code plutôt que par balise.


4 commentaires

Cela semble prometteur. Je trouve intéressant, que le type (CLR) n'est disponible que via la méthode getType (), tandis que la dépendanceObjectType, que AFaik est fondamentalement une enveloppe autour du type CLR, est une propriété.


Oui, je l'ai trouvé intéressant aussi. Je cherchais également pourquoi GetType est une méthode au lieu d'une propriété. Il existe une variété d'opinions, notamment l'efficacité, l'abus d'abus, des conventions sur ce qu'un getteur de propriété devrait faire, etc.


ATM Je n'ai pas d'opportunité pour le tester. Pouvez-vous me dire si les définitions de déclenchement suivantes sont équivalentes? (Est-ce que le mien fonctionne même?) Mon idée originale: Votre Version:


Je n'ai pas beaucoup d'expérience WPF / XAML, alors prenez cela avec un grain de sel: le vôtre spécifie le chemin = parent.dependencyobjecttype.name. Cela ne cherchera que des parents immédiats. Le mien regarde n'importe quel ancêtre.