我试图在画布宽度圆角内绘制一个回转,当我给这个硬编码的尺寸与它显示完美的画布相同。
然而,当我使用这些线来引用父级的宽度和高度时:
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>
不同之处在于,当我将手镯的宽度和高度更改为300时,它非常适合。
DesignerCanvas是一个继承了几乎没有额外函数的画布的类。
答案 0 :(得分:1)
我假设矩形最初被绘制(更大),然后调整大小以适合Canvas
(在整个应用程序调整大小以适应设计后,它变小或变小)。但是Canvas
永远不会为你自动调整(重新绘制)它的孩子,这意味着改变的形状不会显示或重绘自己。它总是能够准确地显示当前添加到画布的孩子时的外观。
如果您想要自动调整大小,则应选择Grid
或StackPanel
作为主持人而不是Canvas
,并将矩形的尺寸设置为Auto
或它的Stretch
属性为&#39;填充&#39;。网格将自动失效,然后重绘所有内容。
检查MSDN - Canvas Class的评论。这里解释了......
或者将Canvas.Children
绑定到矩形的集合。每当引发ActualHeight
事件时,您都会将矩形维度更新为ActualWidth
和Canvas.SizeChanged
...或者从Canvas.Children
集合中手动删除旧矩形,然后添加调整大小再一次。