gpt4 book ai didi

c# - 矩形引用 Canvas 宽度超过 Canvas

转载 作者:太空宇宙 更新时间:2023-11-03 13:20:24 25 4
gpt4 key购买 nike

我正在尝试在 Canvas 宽度的圆角内绘制一个矩形,当我将其硬编码为与 Canvas 相同的大小时,它显示完美。

但是,当我使用这些行来引用父级的宽度和高度时:

Height="{Binding ElementName=MyDesigner, Path=ActualHeight}"
Width="{Binding ElementName=MyDesigner, Path=ActualWidth}"

右侧和底部会超出 Canvas ,我已附上行为图片。

Retangle exceeding width

谁能告诉我这里出了什么问题?

编辑

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 时,它总是会准确地显示形状。

如果您想要自动调整大小,您应该选择 GridStackPanel 作为宿主而不是 Canvas 并将矩形的尺寸设置为 Auto 或其 Stretch 属性为“Fill”。网格将自动失效,然后重新绘制所有内容。

查看MSDN - Canvas Class的备注.这里解释...

或者将 Canvas.Children 绑定(bind)到您的矩形集合。然后,只要引发 Canvas.SizeChanged 事件,您就可以将矩形尺寸更新为 ActualHeightActualWidth ...或者手动从Canvas.Children 集合,然后再次添加调整大小的集合。

关于c# - 矩形引用 Canvas 宽度超过 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24525302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com