wpf - 绑定(bind)到 WPF ToggleButton 的 IsChecked 状态

标签 wpf xaml binding togglebutton

我想使用 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 的转换器至CollapsedfalseVisible :
<BooleanToVisibilityConverter
  x:Key="InverseBooleanToVisibilityConverter" InvertVisibility="True"/>

关于wpf - 绑定(bind)到 WPF ToggleButton 的 IsChecked 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1534208/

相关文章:

c# - mvvm wpf tdd ioc 棱镜的多合一教程

c# - 如何在不更改主机文件的情况下阻止对特定站点的访问,直到重新启动?

c# - 如何将WPF效果颜色绑定(bind)到ControlTemplate的前景或背景

xaml - Xamarin 在底部形成相对布局位置 stacklayout

c# - 如何将 Objective-C 静态库绑定(bind)到 Xamarin.iOS?

c# - CheckComboBox ValueMemberPath 不起作用

c# - 有没有办法在毛伊岛放置一个按钮来打开弹出窗口

wpf根据数据应用静态资源

wpf - 在 WPF 中使用 Multibinding 时是否必须使用转换器?

c# - WPF Windows 上的夜视模式