J'aimerais utiliser une variable WPF ToggleButton
pour développer et réduire certains contrôles de mon application. Comment puis-je utiliser XAML pour accomplir cela?
Je pense que je pourrais en quelque sorte lier l’attribut Visibility
de certains contrôles à l’état ToggleButton
's IsChecked
, mais je ne sais pas comment faire cela.
Peut-être que j'ai besoin de donner à ma ToggleButton
une Name
, puis de la lier à l'aide de ElementName
? Ensuite, il me faudrait une ValueConverter
pour convertir entre une valeur booléenne et une visibilité, correct? Comment pourrais-je créer une ValueConverter
générique à cette fin?
Vous devez lier la Visibility
via un convertisseur:
<Window
x:Class="WpfApplication1.Window1"
xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml">
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</Window.Resources>
<StackPanel>
<ToggleButton x:Name="toggleButton" Content="Toggle"/>
<TextBlock
Text="Some text"
Visibility="{Binding IsChecked, ElementName=toggleButton, Converter={StaticResource BooleanToVisibilityConverter}}"/>
</StackPanel>
</Window>
Dans Silverlight, il n'y a pas de BooleanToVisibilityConverter
mais il est facile d'écrire votre propre avec quelques fonctionnalités supplémentaires:
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
namespace WpfApplication1 {
public class BooleanToVisibilityConverter : IValueConverter {
public Object Convert(Object value, Type targetType, Object parameter, CultureInfo culture) {
if (targetType == typeof(Visibility)) {
var visible = System.Convert.ToBoolean(value, culture);
if (InvertVisibility)
visible = !visible;
return visible ? Visibility.Visible : Visibility.Collapsed;
}
throw new InvalidOperationException("Converter can only convert to value of type Visibility.");
}
public Object ConvertBack(Object value, Type targetType, Object parameter, CultureInfo culture) {
throw new InvalidOperationException("Converter cannot convert back.");
}
public Boolean InvertVisibility { get; set; }
}
}
Vous pouvez maintenant spécifier un convertisseur qui mappe true
à Collapsed
et false
à Visible
:
<BooleanToVisibilityConverter
x:Key="InverseBooleanToVisibilityConverter" InvertVisibility="True"/>
Utilisez le BooleanToVisibilityConverter:
<BooleanToVisibilityConverter x:Key="bvc" />
<TextBlock Visibility="{Binding IsChecked, ElementName=toggle, Converter={StaticResource bvc}}" />
Y a-t-il une raison pour laquelle vous n'utilisez pas simplement le Expander ? Il est basé sur le bouton bascule de toute façon.