我正在尝试在 Canvas 宽度的圆角内绘制一个矩形,当我将其硬编码为与 Canvas 相同的大小时,它显示完美。
但是,当我使用这些行来引用父级的宽度和高度时:
Height="{Binding ElementName=MyDesigner, Path=ActualHeight}"
Width="{Binding ElementName=MyDesigner, Path=ActualWidth}"
右侧和底部会超出 Canvas ,我已附上行为图片。
谁能告诉我这里出了什么问题?
编辑
Canvas xaml 是:
<s:DesignerCanvas Focusable="true" x:Name="MyDesigner"
Background="{StaticResource WindowBackgroundBrush}"
FocusVisualStyle="{x:Null}"
ContextMenu="{StaticResource DesignerCanvasContextMenu}"
Width="300" Height="300">
<Rectangle
Height="{Binding ElementName=MyDesigner, Path=ActualHeight}"
Width="{Binding ElementName=MyDesigner, Path=ActualWidth}"
Fill="Transparent"
Stroke="Black" StrokeThickness="4"
RadiusX="20" RadiusY="20"
Canvas.Left="0"
Canvas.Top="0"/>
<Thumb Name="myThumb" Canvas.Bottom="0" Canvas.Right="0" Background="Blue"
Width="10" Height="10" DragDelta="onDragDelta"
DragStarted="onDragStarted" DragCompleted="onDragCompleted"/>
</s:DesignerCanvas>
不同之处在于,当我将重新缠绕的宽度和高度更改为 300 时,它非常适合。
DesignerCanvas,是一个继承canvas的类,只增加了很少的功能。
最佳答案
我假设矩形最初被绘制(更大),然后调整大小以适合 Canvas
(在整个应用调整大小以适应设计后它更小或变得更小)。但是 Canvas
永远不会为您自动调整其子项的大小(重新绘制),这意味着更改后的形状不会显示或重新绘制。当添加到 Canvas 的 child 时,它总是会准确地显示形状。
如果您想要自动调整大小,您应该选择 Grid
或 StackPanel
作为宿主而不是 Canvas
并将矩形的尺寸设置为 Auto
或其 Stretch
属性为“Fill”。网格将自动失效,然后重新绘制所有内容。
查看MSDN - Canvas Class的备注.这里解释...
或者将 Canvas.Children
绑定(bind)到您的矩形集合。然后,只要引发 Canvas.SizeChanged
事件,您就可以将矩形尺寸更新为 ActualHeight
和 ActualWidth
...或者手动从Canvas.Children
集合,然后再次添加调整大小的集合。
关于c# - 矩形引用 Canvas 宽度超过 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24525302/