【问题标题】:Retangle referencing canvas width exceeds canvas引用画布宽度的矩形超出画布
【发布时间】:2014-07-02 07:30:04
【问题描述】:

我试图在画布宽度的圆角内绘制一个矩形,当我给这个硬编码的画布与它显示完美的大小相同时。

但是,当我使用这些线来参考父级的宽度和高度时:

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

右下角会超出画布,我附上了行为图。

谁能给我提示一下这里出了什么问题?

编辑

画布 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>

不同之处在于,当我将 retangle 的宽度和高度更改为 300 时,它非常适合。

DesignerCanvas,是一个继承了canvas的类,几乎没有额外的功能。

【问题讨论】:

  • 您能否展示其余的 XAML 代码,或者更好地展示 2 个变体?
  • 你为什么不用Border?至于你的问题 - 我的猜测是:你的矩形有某种偏移(由于边距或填充或左上角位置)。您应该发布您的 xaml。
  • 我已经编辑了我的帖子并添加了 xaml,我不使用边框,因为稍后我想将装饰器添加到 retangle 并为将要位于 retangle 内部的元素绘制线条。

标签: c# xaml canvas


【解决方案1】:

我假设矩形最初被绘制(更大),然后调整大小以适应 Canvas(在整个应用程序调整大小以适应设计后变得更小或变小)。但是Canvas 永远不会为您自动调整其子项的大小(重绘),这意味着更改后的形状不会显示或重绘自身。当添加到画布的子项时,它将始终准确地显示形状的外观。

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

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

或者将Canvas.Children 绑定到您的矩形集合。然后,无论何时引发 Canvas.SizeChanged 事件,您都可以将矩形尺寸更新为 ActualHeightActualWidth...或者手动从 Canvas.Children 集合中删除旧矩形,然后再次添加调整大小的矩形。

【讨论】:

  • 感谢您的解释。我已经用右下角的小点调整了画布的大小。我现在也在那里添加了调整大小的调整,就像一个魅力。
猜你喜欢
  • 2020-12-04
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多