c# - 如果它是空的,如何停止 WPF 中的 Rect 绘图?
问题描述
这感觉应该是非常简单的事情,但我无法让它发挥作用。
我有一个<Rectangle>
on a <Canvas>
,其中DataContext
on 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
无限值的错误。
我尝试将属性设置Visibility
为Collapsed
使用数据触发器IsEmpty
将可见性设置为折叠,我尝试在父画布上执行相同操作,但无论我做什么,我仍然会收到这些绑定表达式错误。
有什么办法可以简单地让它“如果它是空的就不要尝试画这个”?
解决方案
我想我用这样的东西解决了一个类似的问题:
<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,可能包含语法错误。
推荐阅读
- jquery - 如何在上传之前预览多个图像多个 div - jQuery
- java - 为什么类没有实现功能接口?
- macos - ARD - 将用户桌面背景设置为存储在客户端桌面上的文件
- regex - inputFormatter 应该只允许十进制数和负数
- xcode - iOS框架plist中的“用户界面样式”键不起作用
- sql - 比较不同表中的行
- ajax - Laravel ajax 根据选择自动填充字段
- bash - VNC 登录和 ssh 启动时的 Raspberry Pi 错误
- javascript - 如何转换为 $('#' + $(this).val()).show() vanilla javascirpt
- r - Delete missing values detected by ggplot() in R