绑定边界可见性/隐藏在WPF中

时间:2016-05-02 20:41:47

标签: c# wpf xaml

我有一个边框围绕一个元素,其可见性绑定到该元素,如下所示:

    <Border Grid.Column="1" Grid.Row="1" BorderBrush="White" BorderThickness="1" Height="27" Width="112"
            Visibility="{Binding IsVisible, ElementName=MinPart, Converter={StaticResource BoolToVisConv}}">
        <wpfTool:DecimalUpDown x:Name="MinPart" Value="1.0" FontSize="13" />
    </Border>

BoolToVisConv转换器的代码是:

public class BooleanToVisibilityConverter : IValueConverter
{
    private object GetVisibility(object value)
    {
        if (!(value is bool))
            return Visibility.Hidden;
        bool objValue = (bool)value;
        if (objValue)
        {
            return Visibility.Visible;
        }
        else
        {
            return Visibility.Hidden;
        }
    }

    public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return GetVisibility(value);
    }

    public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new System.NotImplementedException();
    }
}

我试图将其设置为如果将MinPart设置为可见,则边框设置为可见。现在,即使隐藏了边框,也会永久隐藏MinPart控件(将其设置为可见,并且不会执行此操作)。我很确定它是因为它被困在循环中。因此,我认为我应该设置边框的border属性而不是设置可见性,但我不是&# 39;不知道如何将边框绑定到控件MinPart的可见性,而无需创建新的转换器。换句话说,如何过度加载BooleanToVisibilityConverter,以便它可以检测发送给它的可见性对象?

1 个答案:

答案 0 :(得分:3)

当您的控件嵌套时,这意味着如果您使父级不可见,则子控件将不可见。

尝试将您的孩子控件拉出来并将其放在边框定义的下方:

    <Border Grid.Column="1" Grid.Row="1" BorderBrush="White" BorderThickness="1" Height="27" Width="112"
        Visibility="{Binding IsVisible, ElementName=MinPart, Converter={StaticResource BoolToVisConv}}"/>
    <wpfTool:DecimalUpDown x:Name="MinPart" Value="1.0" FontSize="13" />