矩形引用画布宽度超出画布

时间:2014-07-02 07:30:04

标签: c# xaml canvas

我试图在画布宽度圆角内绘制一个回转,当我给这个硬编码的尺寸与它显示完美的画布相同。

然而,当我使用这些线来引用父级的宽度和高度时:

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

右边和底部将超过画布,我附上了行为的图片。

Retangle exceeding width

任何人都可以告诉我这里出了什么问题?

修改

画布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是一个继承了几乎没有额外函数的画布的类。

1 个答案:

答案 0 :(得分:1)

我假设矩形最初被绘制(更大),然后调整大小以适合Canvas(在整个应用程序调整大小以适应设计后,它变小或变小)。但是Canvas永远不会为你自动调整(重新绘制)它的孩子,这意味着改变的形状不会显示或重绘自己。它总是能够准确地显示当前添加到画布的孩子时的外观。

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

检查MSDN - Canvas Class的评论。这里解释了......

或者将Canvas.Children绑定到矩形的集合。每当引发ActualHeight事件时,您都会将矩形维度更新为ActualWidthCanvas.SizeChanged ...或者从Canvas.Children集合中手动删除旧矩形,然后添加调整大小再一次。