Comment pouvez-vous obtenir un TextBlock XAML pour réduire lorsqu'il ne contient aucune donnée?
Je veux dire WPF: "Si TextBlock ne contient pas de données, alors ne le montrent pas."
ESSAYER #1 avec un simple déclencheur produit l'erreur "'Texte' membre n'est pas valide car il n'a pas de qualification de type nom.":
<StackPanel Margin="10">
<TextBlock Padding="10" Background="Yellow" Text="{Binding MainMessage}">
<TextBlock.Triggers>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
</TextBlock.Triggers>
</TextBlock>
</StackPanel>
ESSAYER #2 avec un style de déclenchement produit l'erreur Le type de "style" ne contient pas de type public-classe de convertisseur de:
<UserControl x:Class="TestItemsSource234.Views.SmartForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<Style x:Key="MainMessageStyle" TargetType="TextBlock">
<Style.Triggers>
<Trigger>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<StackPanel Margin="10">
<TextBlock Style="MainMessageStyle" Padding="10" Background="Yellow" Text="{Binding MainMessage}"/>
</StackPanel>
</UserControl>
ESSAYER #3 avec un style DataTrigger produit la même erreur Le type de "style" ne contient pas de type public-classe de convertisseur de:
<UserControl x:Class="TestItemsSource234.Views.SmartForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<Style x:Key="MainMessageStyle" TargetType="TextBlock">
<Style.Triggers>
<Trigger>
<DataTrigger Binding="{Binding MainMessage}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<StackPanel Margin="10">
<TextBlock Style="MainMessageStyle" Padding="10" Background="Yellow" Text="{Binding MainMessage}"/>
</StackPanel>
</UserControl>
ESSAYER #4: OK, c'était un idiot de surveillance de la mine, oublié le StaticResourcemais même alors, les deux Essayer #2 et Essayez #3 obtenir une nouvelle erreur Le type de Système.De Windows.Déclencheur dans le Style est inconnu:
<UserControl x:Class="TestItemsSource234.Views.SmartForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<Style x:Key="MainMessageStyle" TargetType="TextBlock">
<Style.Triggers>
<Trigger>
<Trigger Property="Text" Value="">
<Setter Property="Visibility" Value="Collapsed"/>
</Trigger>
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<StackPanel Margin="10">
<TextBlock Style="{StaticResource MainMessageStyle}" Padding="10" Background="Yellow" Text="{Binding MainMessage}"/>
</StackPanel>
</UserControl>
Alors, comment dois-je faire?
RÉPONSE:
OK, donc c'était un fou de la syntaxe de la chasse avec un happy end, voici la version qui fonctionne, espérons que cela aide quelqu'un, leçons apprises:
- si le déclencheur, puis style
- si le style, puis StaticResource
- si la liaison, puis DataTrigger
code qui fonctionne:
<UserControl x:Class="TestItemsSource234.Views.SmartForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<UserControl.Resources>
<Style x:Key="MainMessageStyle" TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding MainMessage}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</UserControl.Resources>
<StackPanel Margin="10">
<ItemsControl
ItemsSource="{Binding DataTypeViews}"/>
<TextBlock Style="{StaticResource MainMessageStyle}" Padding="10" Background="Yellow" Text="{Binding MainMessage}"/>
</StackPanel>
</UserControl>
source d'informationauteur Edward Tanguay
Vous devez vous connecter pour publier un commentaire.
Essayer #2 ou Essayez #3 devrait être bon, le problème est dans la ligne où vous faites référence à la feuille de style, vous devez utiliser soit " Style="{StaticResource [KeyName]}"' ou " Style="{DynamicResource [KeyName]}"'.
Essayer (Essayer #2):
En Essayer 1 de vous révéler une limitation de courant WPF versions: les Déclencheurs ne sont pas pris en charge directement sur les éléments.
La solution la plus simple et la plus rapide sont les convertisseurs. Alors, pourquoi ne pas BAISER? (keep it simple, stupid)?
À mettre en œuvre convertisseur classes seulement quelques lignes de code sont nécessaires.
Converter:
Utilisation:
Inclure l'espace de noms:
xmlns:c="clr-namespace:Hfr.Windows.Controls"
Définir des ressources:
<c:StringToVisibilityConverter x:Key="StringToVisiblity"/>
L'utiliser:
Comme vous allez utiliser votre convertisseurs dans de multiples projets, de mettre en œuvre le convertisseur de classes dans une "bibliothèque commune".
Je pense que le plus simple serait de définir un Convertisseur qui convertit une chaîne en visibilité.
Puis juste