WPF:如何自动调整其容器的路径?

时间:2010-05-05 08:54:39

标签: wpf path resize containers

我有一个必须调整其StackPanel容器大小的路径。

<StackPanel x:Name="TrackSurface">
    <Path Fill="AliceBlue"
          Stroke="Black" StrokeThickness="1"
          Data="{StaticResource TranslateZ}">
    </Path>
</StackPanel>

我考虑使用绑定到容器的转换但实际上不知道如何实现。有人可以给我提示吗?

4 个答案:

答案 0 :(得分:25)

我将Stackpanel更改为Path to Fill的Grid和Stretch属性。

<Grid x:Name="TrackSurface"> 
<Path Fill="AliceBlue" 
Stretch="Fill"
      Stroke="Black" StrokeThickness="1" 
      Data="M148,28 C221,133 110.50025,119.5 110.50025,119.5 L124.50016,68.5 z"> 
</Path> 

答案 1 :(得分:19)

您为什么不使用ViewBox?这将根据需要缩小或增长路径。如果您不想缩放,而是剪裁,则将剪辑模式设置为限制在控件的边界框中。 (我为此在ContentPresenter中包装路径。)

答案 2 :(得分:3)

确保您的路径小于StackPanel。

一个非常简单的路径的最简单方法是在每个数字中移动逗号(即在TranslateZ中将所有内容除以10或100),或者对于更复杂的路径添加LayoutTransform(根据需要降低缩放因子):

<StackPanel x:Name="TrackSurface">
    <Path Fill="AliceBlue" Stroke="Black" StrokeThickness="1" 
          Data="{StaticResource TranslateZ}">
          <Path.LayoutTransform>
               <ScaleTransform ScaleX="0.1" ScaleY="0.1"/>
          </Path.LayoutTransform>
    </Path>
</StackPanel>

一些备注:

我遇到了类似的问题,其中包含一个包含路径的按钮模板。  按钮的“自动”大小由路径决定,因为路径  具有最大尺寸的模板内容。

这本身可能不会成为一个问题,因为如果你指定  按钮的高度/宽度,或者按钮的高度/宽度  Horizo​​ntal- / VerticalAlignment设置为拉伸,当然是路径  会扩大规模。

但是,对于Horizo​​ntal- / VerticalAlignment的其他值,按钮  大小取决于其内容所需的空间量,  在我的情况下,这导致了一个带有路径原始的按钮  尺寸。

答案 3 :(得分:0)

如果您想要使用缩放的恒定笔触宽度,则可以使用自定义Shape。 WPF中的形状有效地封装了几何的缩放并在之后应用了笔划,这意味着您可以使用一个也始终具有相同笔划宽度的缩放路径。

创建形状非常简单:

public class MyShape : Shape
{
  public override Geometry DefiningGeometry
  {
    get
    {
      // Create your geometry here
    }
  }
}