2013-04-24 75 views
1

我一直在试图找出一个有希望的日子很简单的事情,但我只是不明白。我想要的是一个窗口,让我们说一个按钮和一个多边形两个不同的容器。当调整窗口的大小时,我希望按钮保持其大小和相对位置(例如,左上角,而不被其他容器覆盖)并调整多边形的大小(它不应该保持其宽度/高度比例)而不改变其行程厚度。调整窗口大小的形状

这是非常重要,我可以从代码隐藏完全创建多边形,在XAML 定义它不帮助的。

回答

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。

+0

非常感谢!我设法在后面的代码中做了绑定,学到了很多东西,最终让我的模式继续前进。 – egon12 2013-04-24 22:00:31

0

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

例如,位于网格中的控件使用边距及其大小进行定位。 “画布”中的控件使用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

希望这有助于!