我试图在画布宽度圆角内绘制一个回转,当我给这个硬编码的尺寸与它显示完美的画布相同 .
但是当我使用这些线来引用父级的宽度和高度时:
Height="{Binding ElementName=MyDesigner, Path=ActualHeight}"
Width="{Binding ElementName=MyDesigner, Path=ActualWidth}"
右边和底部将超过画布,我附上了行为的图片 .
任何人都可以给我一个暗示这里出了什么问题?
Edit
画布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的类,只有很少的额外函数 .
1 回答
我假设矩形最初被绘制(更大),然后调整大小以适合
Canvas
(在整个应用程序调整大小以适应设计后,它变小或变小) . 但Canvas
永远不会自动调整大小(重绘)'s children for you which means the changed shape won' t显示或重绘自己 . 它总是会在添加到画布的子项时显示形状 .如果要自动调整大小,则应选择
Grid
或StackPanel
作为主机而不是Canvas
,并将矩形的尺寸设置为Auto
或将Stretch
属性设置为'Fill' . 网格将自动无效,然后重绘所有内容 .检查MSDN - Canvas Class的评论 . 这里解释了......
或者将
Canvas.Children
绑定到矩形的集合 . 每当引发Canvas.SizeChanged
事件时,您都会将矩形尺寸更新为ActualHeight
和ActualWidth
...或者从Canvas.Children
集合中手动删除旧矩形,然后再次添加调整大小的矩形 .