首页 文章

Retangle引用画布宽度超出画布

提问于
浏览
2

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

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

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

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

Retangle exceeding width

任何人都可以给我一个暗示这里出了什么问题?

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 回答

  • 1

    我假设矩形最初被绘制(更大),然后调整大小以适合 Canvas (在整个应用程序调整大小以适应设计后,它变小或变小) . 但 Canvas 永远不会自动调整大小(重绘)'s children for you which means the changed shape won' t显示或重绘自己 . 它总是会在添加到画布的子项时显示形状 .

    如果要自动调整大小,则应选择 GridStackPanel 作为主机而不是 Canvas ,并将矩形的尺寸设置为 Auto 或将 Stretch 属性设置为'Fill' . 网格将自动无效,然后重绘所有内容 .

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

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

相关问题