Comment puis-je utiliser les types enum dans le code XAML?
Je suis en train d'apprendre WPF et j'ai rencontré le problème suivant:
J'ai un type enum dans un autre espace de noms que mon XAML:
public enum NodeType
{
Type_SYSTEM = 1, //System
Type_DB = 2, //Database
Type_ROOT = 512, //Root folder
Type_FOLDER = 1024, //Folder
}
dans mon XAML j'aimerais déclencher une image avec un entier
<Image.Style>
<Style TargetType="{x:Type Image}">
<Style.Triggers>
<DataTrigger Binding="{Binding Type}" Value="{NodeType: }">
<Setter Property="Source" Value="/Images/DB.PNG"/>
</DataTrigger>
<DataTrigger Binding="{Binding Type}" Value="128">
<Setter Property="Source" Value="/Images/SERVER.PNG"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
Est-il un moyen d'obtenir une valeur d'entier et de le comparer avec un type enum directement dans le code XAML?
Mon enum est dans l'espace de noms AnotherNamespace.Types
<DataTrigger Binding="{Binding IntegerType}" Value="MyEnumType.Type_DB">
<Setter Property="Source" Value="/Images/SERVER.PNG"/>
Vous devez vous connecter pour publier un commentaire.
J'ai eu une question similaire ici, et mon résultat final a été de créer un générique IValueConverter qui a passé le
enum
valeur je voulais match dans leConverterParameter
, et il retournetrue
oufalse
selon si la valeur limite correspond à la(int)
valeur de l'Enum.Le résultat final ressemble à ceci:
Code XAML:
Convertisseur
xmlns
dans la balise racine. Par exemple, cette ligne permettra d'ajouter de l'espace de nomsMyNamespace
de l'assembléeMyAssembly
pour le fichier XAML, et il peut être référencé par le préfixe"local"
:xmlns:local="clr-namespace:MyAssembley.MyNamespace;assembly=MyAssembly"
local:XHelper.NodeType.Type_DB
si votre enum est dans une classe appeléeXHelper
x:Static
pris en charge uniquement deux niveaux, donclocal:Class.Property
fonctionne, maislocal:Class.Property.SubProperty
ne le fait pas. Essayez d'utiliser{x:Type local:XHelper.NodeType.Type_DB}
pour votreConverterParameter
au lieuVous suffit de vous assurer que votre espace de noms est comptabilisée dans votre XAML en-tête puis vous pouvez faire référence à la fois personnalisée, les DPs et les valeurs de l'enum directement dans votre balisage.
Pour exemple, j'utilise ce code pour faire ça:
Notez que vous ne pouvez pas accéder à DataTriggers dans un Style, vous devez plutôt faire un DataTemplate ou ControlTemplate pour que (cependant, .NET 4 ajoute la possibilité de définir des déclencheurs dans des styles). Vous pouvez remplacer le ControlTemplate à partir d'un Style comme:
Pour les DataTemplates vous voulez avoir des liaisons vers un objet, vous pouvez simplement utiliser un ContentPresenter et l'ensemble de son contenu à l'objet que vous souhaitez afficher avec un DataTemplate définition à utiliser pour l'affichage de l'objet. Il y a toujours un moyen d'utiliser DataTriggers ce n'est pas toujours directe ou aussi simple que d'utiliser un Style.