首页 > 解决方案 > 如果它是空的,如何停止 WPF 中的 Rect 绘图?

问题描述

这感觉应该是非常简单的事情,但我无法让它发挥作用。

我有一个<Rectangle>on a <Canvas>,其中DataContexton the<Rectangle>绑定到 a Rect,并且我正在尝试使用<Rectangle>属性Canvas.Left="{Binding Left}"Width="{Binding Width}"( 与垂直组件类似) 来绘制它。

如果那里有一个矩形,这很好,但在边界Rect为空的情况下(即IsEmpty == True),它会给我很多关于Value produced by BindingExpression is not valid for target property无限值的错误。

我尝试将属性设置VisibilityCollapsed使用数据触发器IsEmpty将可见性设置为折叠,我尝试在父画布上执行相同操作,但无论我做什么,我仍然会收到这些绑定表达式错误。

有什么办法可以简单地让它“如果它是空的就不要尝试画这个”?

标签: c#wpfbindingdrawing

解决方案


我想我用这样的东西解决了一个类似的问题:

<Rectangle Canvas.Left="{Binding Left}"
       Canvas.Top="{Binding Top}">
    <Rectangle.Style>
        <Style TargetType="{x:Type Rectangle}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsEmpty}" Value="True">
                    <Setter Property="Canvas.Left" Value="0"/>
                    <Setter Property="Canvas.Top" Value="0"/>
                    <Setter Property="Visibility" Value="Collapsed"/>
                </DataTrigger>             
            </Style.Triggers>
        </Style> 
    </Rectangle.Style>
</Rectangle>

因此,基本上“打破”与无效DataContext值的绑定并在 XAML 中设置一个固定值。

注意:这是手写的 XAML,可能包含语法错误。


推荐阅读