Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定到AvalonDock 2中的LayoutOnTableItem可见性_C#_Wpf_Avalondock - Fatal编程技术网

C# 绑定到AvalonDock 2中的LayoutOnTableItem可见性

C# 绑定到AvalonDock 2中的LayoutOnTableItem可见性,c#,wpf,avalondock,C#,Wpf,Avalondock,我正在尝试将layoutAchorableItem的可见性绑定到ViewModel中的布尔值,以便以编程方式显示和隐藏锚点: 但是,每当我隐藏锚定对象时,都会引发异常: 对象引用未设置为实例 位于…\Xceed.Wpf.AvalonDock\Layout\LayoutContent.cs中的Xceed.Wpf.AvalonDock.Layout.LayoutContent.Close():第346行 在…\Xceed.Wpf.AvalonDock\Controls\LayoutItem.cs

我正在尝试将
layoutAchorableItem
可见性
绑定到ViewModel中的布尔值,以便以编程方式显示和隐藏锚点:


但是,每当我隐藏锚定对象时,都会引发异常:

对象引用未设置为实例

位于…\Xceed.Wpf.AvalonDock\Layout\LayoutContent.cs中的Xceed.Wpf.AvalonDock.Layout.LayoutContent.Close():第346行
在…\Xceed.Wpf.AvalonDock\Controls\LayoutItem.cs中的Xceed.Wpf.AvalonDock.Controls.LayoutItem.OnVisibilityChanged()处:第310行
在…\Xceed.Wpf.AvalonDock\Controls\layoutachrableem.cs中的Xceed.Wpf.AvalonDock.Controls.layoutachrableem.OnVisibilityChanged()处:第299行
在…\Xceed.Wpf.AvalonDock\Controls\LayoutItem.cs中的Xceed.Wpf.AvalonDock.Controls.LayoutItem.OnVisibilityChanged(DependencyObject s,DependencyPropertyChangedEventArgs e)处,第303行
在…\Xceed.Wpf.AvalonDock\Controls\LayoutItem.cs中的Xceed.Wpf.AvalonDock.Controls.LayoutItem.b_u1(DependencyObject s,DependencyPropertyChangedEventArgs e)处:第37行
在System.Windows.PropertyChangedCallback.Invoke(DependencyObject d,DependencyPropertyChangedEventArgs e)
位于System.Windows.DependencyObject.OnPropertyChanged(DependencyPropertyChangedEventArgs e)
...
注释掉绑定到可见性后,锚定对象将按预期隐藏

tl;博士 您需要在绑定中添加一个具有值
可见性的
ConverterParameter
。Hidden

<Setter Property="Visibility" Value="{Binding Model.IsVisible, ConverterParameter={x:Static Visibility.Hidden}, Converter={StaticResource btvc}, Mode=TwoWay}"/>
根据微软的说法,
System.Windows.Visibility.Collapsed
意味着在布局过程中该项目不可见,也没有为其保留空间。这听起来像是当我们点击
X
隐藏锚点时锚点发生的事情(这可能发生在视觉树的某个地方)。但是,为什么评论说,这通常不需要锚定?如果我们查看
layoutachrableItem.OnVisibilityChanged()

很明显,AvalonDock使用了
可见性.Hidden
值来指示锚具是隐藏的。(这让我有点困惑,因为Microsoft声明
隐藏
隐藏元素,但在布局中保留空间,而这不是隐藏锚定对象时的行为。)那么为什么可见性
折叠
而不是
隐藏
?答案就在
BooltVisibilityConverter

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    if (value is bool && targetType == typeof(Visibility))
    {
        bool val = (bool)value;
        if (val)
            return Visibility.Visible;
        else
            if (parameter != null && parameter is Visibility)
                return parameter;
            else
                return Visibility.Collapsed;
    }

    // ...
}
除非传递类型为
Visibility
的参数,否则当布尔值为false时,将使用
Visibility.Collapsed
。我们希望false表示
可见性。隐藏
,因此我们将其设置为
转换器参数

<Setter Property="Visibility" Value="{Binding Model.IsVisible, ConverterParameter={x:Static Visibility.Hidden}, Converter={StaticResource btvc}, Mode=TwoWay}"/>


我以前没有注意到问题的后续内容。谢谢你把事情弄清楚了?这意味着我可以继续使用主回购协议的来源。(对于其他人,这是我的相关问题:)谢谢!非常感谢。非常感谢。非常感谢。非常感谢。
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    if (value is bool && targetType == typeof(Visibility))
    {
        bool val = (bool)value;
        if (val)
            return Visibility.Visible;
        else
            if (parameter != null && parameter is Visibility)
                return parameter;
            else
                return Visibility.Collapsed;
    }

    // ...
}
<Setter Property="Visibility" Value="{Binding Model.IsVisible, ConverterParameter={x:Static Visibility.Hidden}, Converter={StaticResource btvc}, Mode=TwoWay}"/>