首页 > 解决方案 > 如何在c#wpf中检查元素是否离开其父级

问题描述

我在我的应用程序的画布上运行时创建形状,除了所有形状之外,椭圆都超出了画布。如何将其限制在画布上?由于顶点处的控制点,所有其他形状都包含在画布中。我如何检查不让椭圆在没有剪裁的情况下离开画布。我使用了 ClipToBounds,但它不符合我的需求。

此外,另一种解决方案是,如果我可以在 radiusX 属性的椭圆左侧添加一个控制点。我无法在椭圆上的 radiusX 左侧添加控制点。如果你能帮我解决这两个问题?

   radiusXcp = new ControlPoint(this, EllipseGeom, EllipseGeometry.RadiusYProperty, 1, true, false);
        radiusXcp.RelativeTo = EllipseGeometry.CenterProperty;
        shape_ControlPoints.Add(radiusXcp);

        radiusXcp = new ControlPoint(this, EllipseGeom, EllipseGeometry.RadiusXProperty, 0, true, false);
        radiusXcp.RelativeTo = EllipseGeometry.CenterProperty;
        shape_ControlPoints.Add(radiusXcp);

        //EllipseGeom.RadiusX = -EllipseGeom.RadiusX;

        //radiusXcp = new ControlPoint(this, EllipseGeom, EllipseGeometry.RadiusXProperty, 0, true, false);
        //radiusXcp.RelativeTo =  EllipseGeometry.CenterProperty;
        //shape_ControlPoints.Add(radiusXcp);

        //EllipseGeom.RadiusX = -EllipseGeom.RadiusX;

标签: c#wpfcanvasgeometryshapes

解决方案


只需设置ClipToBounds="true"为其父控件,即可避免在其外部绘制画布。

就我而言,我将其设置为 Grid 如下:

<Grid x:Name="MainGrid" Background="WhiteSmoke" ClipToBounds="true">
    <Canvas Margin="10" Background="Transparent"
    SizeChanged="ViewportSizeChanged"
    MouseLeftButtonDown="ViewportMouseLeftButtonDown"
    MouseLeftButtonUp="ViewportMouseLeftButtonUp"
    MouseMove="ViewportMouseMove"
    MouseWheel="ViewportMouseWheel">

        <Canvas x:Name="canvas" Width="1000" Height="600"
        HorizontalAlignment="Left" VerticalAlignment="Top">
            <Canvas.RenderTransform>
                <MatrixTransform x:Name="transform"/>
            </Canvas.RenderTransform>
        </Canvas>

        <Canvas x:Name="canvas2" Width="1000" Height="600"
        HorizontalAlignment="Left" VerticalAlignment="Top">
            <Canvas.RenderTransform>
                <MatrixTransform x:Name="transform2"/>
            </Canvas.RenderTransform>
        </Canvas>
    </Canvas>
</Grid>

推荐阅读