我想使用 WPF ToggleButton
展开和折叠我的应用程序中的一些控件。如何使用 XAML 来完成此任务?
我在想我可以以某种方式绑定(bind) Visibility
ToggleButton
的某些控件的属性的IsChecked
状态,但我不知道该怎么做。
也许我需要给我的ToggleButton
一个 Name
, 然后使用 ElementName
绑定(bind)?然后我需要一个 ValueConverter
用于在 bool 值和可见性之间进行转换,对吗?我怎么能做一个通用的ValueConverter
以此目的?
最佳答案
您需要绑定(bind)Visibility
通过转换器:
<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>
在 Silverlight 中没有
BooleanToVisibilityConverter
但是使用一些附加功能很容易编写自己的: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; }
}
}
现在您可以指定映射
true
的转换器至Collapsed
和 false
至Visible
:<BooleanToVisibilityConverter
x:Key="InverseBooleanToVisibilityConverter" InvertVisibility="True"/>
关于wpf - 绑定(bind)到 WPF ToggleButton 的 IsChecked 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1534208/