WPF中用于边框可见性的绑定问题

4
我有一个包围一个元素的边框,其可见性与该元素绑定,代码如下:

    <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控件也会永久隐藏(将其可见性设置为可见并不能撤销这种情况)。我相信这是因为它被困在循环中。因此,我认为应该设置边框的属性而不是设置可见性,但我不知道如何将边框绑定到MinPart控件的可见性上,而不创建新的转换器。换句话说,如何重载BooleanToVisibilityConverter以便它可以检测发送给它的对象的可见性?


MiniPart的可见性是如何设置的?这是在代码中手动完成的吗? - zack.lore
它是在代码后台被设置的。它会根据用户设置的其他变量而有所不同。 - Sean
2
为什么不将它们都绑定到IsVisible并设置它,而不是直接设置MiniPart的可见性呢? - zack.lore
1个回答

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" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接