绑定到 WPF ToggleButton 的 IsChecked 状态
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1534208/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Binding to a WPF ToggleButton's IsChecked state
提问by M. Dudley
I would like to use a WPF ToggleButton
to expand and collapse some controls in my application. How can I use XAML to accomplish this?
我想使用 WPFToggleButton
来展开和折叠我的应用程序中的一些控件。如何使用 XAML 来完成此操作?
I'm thinking that I could somehow bind the Visibility
attribute of some controls to the ToggleButton
's IsChecked
state, but I do not know how to do this.
我想我可以以某种方式将Visibility
某些控件的属性绑定到ToggleButton
'sIsChecked
状态,但我不知道该怎么做。
Maybe I need to give my ToggleButton
a Name
, then bind using ElementName
? Then I would need a ValueConverter
for converting between a boolean value and a Visibility, correct? How could I make a generic ValueConverter
for this purpose?
也许我需要给我的ToggleButton
a Name
,然后使用ElementName
? 然后我需要ValueConverter
在布尔值和可见性之间进行转换,对吗?我怎么能ValueConverter
为此目的制作一个泛型?
回答by Martin Liversage
You need to bind the Visibility
through a converter:
您需要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>
In Silverlight there is no BooleanToVisibilityConverter
but it is easy to write your own with some added features:
在 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; }
}
}
Now you can specify a converter that maps true
to Collapsed
and false
to Visible
:
现在,您可以指定映射转换器true
来Collapsed
和false
到Visible
:
<BooleanToVisibilityConverter
x:Key="InverseBooleanToVisibilityConverter" InvertVisibility="True"/>
回答by itowlson
Use the BooleanToVisibilityConverter:
使用 BooleanToVisibilityConverter:
<BooleanToVisibilityConverter x:Key="bvc" />
<TextBlock Visibility="{Binding IsChecked, ElementName=toggle, Converter={StaticResource bvc}}" />