【问题标题】:BooleanToVisibilityConverter that converts to Visible when true or null and Collapsed when falseBooleanToVisibilityConverter 在 true 或 null 时转换为 Visible,在 false 时转换为 Collapsed
【发布时间】:2020-08-25 03:30:48
【问题描述】:

我在 ThreeState ToggleButton 和普通按钮之间做了一些绑定

这就是我想要实现的目标:

button#1button#2 IsChecked=True 或 Null 时可见

button#1 如果 button#2 IsChecked=False

则折叠

内置的 BooleanToVisibilityConverter 仅在 true 时显示按钮。

如果您能在转换器方面提供帮助,我将不胜感激。 谢谢

【问题讨论】:

  • 如果你已经在使用某种视图模型,这应该可以帮助你绑定一个布尔值来控制:stackoverflow.com/questions/14692461/…
  • 你必须通过实现IValueConverter来实现自定义转换器。
  • BionicCode,是的,但不知道如何使用 ThreeState。
  • 为这些按钮和可见性添加到目前为止的代码。这让人们更容易为您提供帮助。

标签: c# wpf


【解决方案1】:

并且没有 BooleanToVisibilityConverter,只有 XAML:

<Window.Resources>
    <Style TargetType="Button">
        <Setter Property="Visibility"
                Value="Visible" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=chk1, Path=IsChecked}"
                         Value="False">
                <Setter Property="Visibility"
                        Value="Collapsed" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>
<Grid>
    <Button Content="Button"
            HorizontalAlignment="Left"
            Margin="34,68,0,0"
            VerticalAlignment="Top"
            Width="75" />
    <CheckBox x:Name="chk1"
              Content=" Toggle"
              HorizontalAlignment="Left"
              Margin="34,29,0,0"
              VerticalAlignment="Top"
              IsThreeState="True"
              IsChecked="True" />
</Grid>

【讨论】:

    【解决方案2】:

    这非常简单。当valuetruenull 时,以下IValueConverter 返回Visibility.Visible

    public sealed class BooleanToVisibilityConverter : IValueConverter
    {
      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
      {
        return value is bool bValue && bValue 
          || value == null 
            ? Visibility.Visible 
            : Visibility.Collapsed;
      }
    
      public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
      {
        return value is Visibility visibility 
          && visibility == Visibility.Visible;
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-25
      • 2022-12-08
      • 2020-07-06
      • 2011-12-16
      • 2011-06-13
      • 1970-01-01
      • 2014-01-17
      • 2019-08-27
      • 1970-01-01
      相关资源
      最近更新 更多