将形状大小调整为窗口大小

本文关键字:调整 窗口大小 | 更新日期: 2023-09-27 18:10:56

这几天我一直在努力想弄清楚一件很简单的事情,但我就是不明白。我想要的是一个窗口,假设一个按钮和一个多边形在两个不同的容器

当调整窗口大小时,我希望按钮保持其大小和相对位置(例如。到左上角,不被另一个容器覆盖),并在不改变其描边厚度的情况下调整多边形的大小(它不应该保持其宽度/高度比)。

非常重要的是,我可以完全从代码后面创建多边形,在xaml 中定义它根本没有帮助。

将形状大小调整为窗口大小

你可以创建一个带有缩放PathGeometry的路径,它使用容器的宽度和高度作为缩放因子。因此,您可以完全在逻辑坐标中指定几何形状,在任意方向上范围从0到1:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Button HorizontalAlignment="Left" Margin="5" Content="Button"/>
    <Canvas x:Name="polylineCanvas" Grid.Row="1">
        <Path Stroke="Blue" StrokeThickness="3">
            <Path.Data>
                <PathGeometry x:Name="polyline">
                    <PathGeometry.Transform>
                        <ScaleTransform
                            ScaleX="{Binding ActualWidth, ElementName=polylineCanvas}"
                            ScaleY="{Binding ActualHeight, ElementName=polylineCanvas}"/>
                    </PathGeometry.Transform>
                </PathGeometry>
            </Path.Data>
        </Path>
    </Canvas>
</Grid>

现在你可以像下面这样用代码指定几何图形:

var points = new Point[]
{
    new Point(0.1, 0.1),
    new Point(0.9, 0.1),
    new Point(0.9, 0.9),
    new Point(0.1, 0.9)
};
var figure = new PathFigure
{
    StartPoint = points[0],
    IsClosed = true
};
var segment = new PolyLineSegment(points.Skip(1), true);
figure.Segments.Add(segment);
polyline.Figures.Add(figure);

你可以选择使用StreamGeometry而不是PathGeometry。

WPF中没有锚。有许多布局控件,每个控件都有不同的方式来设置控件的位置。

例如,位于网格中的控件使用边距和它们的大小来定位。Canvas中的控件使用Canvas.Top, Canvas.Left, Canvas.RightCanvas.Bottom来定位。StackPanels中的控件使用边距来获得分隔。

我建议你看看这些关于WPF布局的文章,看看你想要什么:

http://www.codeproject.com/KB/WPF/WPFLayoutQS.aspx

http://www.c-sharpcorner.com/UploadFile/dpatra/105202009083754AM/1.aspx

希望这对你有帮助!