Comment puis-je définir de manière sélective la «visibilité» d'un TabItem via DataBinding / Triggers

StackOverflow https://stackoverflow.com/questions/302312

  •  08-07-2019
  •  | 
  •  

Question

J'ai une page à onglet qui doit être masquée si une propriété (BlahType) est définie sur 1 et affichée si définie sur 0. C'est ce que je VEUX faire:

<TabItem Header="Blah">
    <TabItem.Triggers>
        <DataTrigger Binding="{Binding BlahType}" Value="0">
            <Setter Property="TabItem.Visibility" Value="Hidden" />
        </DataTrigger>
    </TabItem.Triggers>
</TabItem>

Le problème, c’est que j’obtiens cette erreur:

"Triggers collection members must be of type EventTrigger"

Si vous signalez cette erreur à Google, vous verrez que Dr. WPF explique l'erreur . Existe-t-il un moyen propre de faire ce que j'essaie de réaliser ici?

Était-ce utile?

La solution

Je pense que la collection de déclencheurs d'un contrôle ne prend actuellement en charge que EventTriggers. Si vous souhaitez utiliser un DataTrigger, placez-le simplement dans un style, par exemple:

<TabItem Header="Blah">
    <TabItem.Style>
        <Style>
            <Style.Triggers>
                <DataTrigger Binding="{Binding BlahType}" Value="0">
                    <Setter Property="TabItem.Visibility" Value="Hidden" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </TabItem.Style>
</TabItem>

Autres conseils

Eh bien, vous ne pouvez pas faire cela en utilisant des déclencheurs (sauf si vous vous trouvez dans un DataTemplate, un ControlTemplate ou un style).

Vous pouvez le faire en utilisant une liaison. Vous devrez écrire un ValueConverter personnalisé qui traduira 0/1 en Visible / Caché, puis vous pourrez lier la propriété Visibility à la propriété BlhaType.

Vous pouvez également définir la visibilité dans le code et abandonner une approche XAML (ce que j'aurais fait).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top