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

标签 c# xaml canvas

我正在尝试在 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/

相关文章:

c# - 如何在 Windows Phone 8.1 中检测操作系统语言

delphi - Delphi 中 tStringGrid 中的 OnSelectCell 事件从单元格坐标到 Canvas 像素位置

javascript - 在 HTML Canvas 上获取填充和描边的单个阴影

c# - 如何创建连接?

c# - MenuFlyout - 编码项目

c# - 是否可以执行存储在变量中的机器代码?

javascript - Fabric.js 对象大小

c# - 在 ASP.NET 的 Web 服务中使用 session 状态

c# - 如果对象被处理,则阻止 MouseLeave 触发器

xaml - Xamarin.Forms:无法访问文件夹中的图像