我几天来一直试图想出一个非常简单的事情,但我只是不明白。我想要的是一个窗口,让我们在两个不同的容器中说一个按钮和一个Polygon。
当调整窗口大小时,我希望按钮保持其大小和相对位置(例如,左上角,而不被另一个容器覆盖)并调整多边形的大小(它不应保持其宽高比)不改变其行程厚度。
非常重要,我可以完全从代码隐藏创建Polygon,在xaml中定义它根本不帮助。
答案 0 :(得分:0)
WPF中没有锚点。有许多布局控件,每个布局控件都有不同的方式来设置控件的位置。
例如,位于网格中的控件使用边距及其大小进行定位。 “画布”中的控件使用Canvas.Top
,Canvas.Left
,Canvas.Right
和Canvas.Bottom
来定位。 StackPanels
中的控件使用边距来获得分离。
我建议你看看这些关于WPF布局的文章得到你想要的东西:
http://www.codeproject.com/KB/WPF/WPFLayoutQS.aspx
http://www.c-sharpcorner.com/UploadFile/dpatra/105202009083754AM/1.aspx
希望这有帮助!
答案 1 :(得分:0)
您可以使用缩放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。