在WPF中复制9片功能

在WPF中复制9片功能,wpf,xaml,Wpf,Xaml,我真的很喜欢Flash/Flex中的9片功能。这是一个伟大的快速方法,使液体矢量布局。看看: 我正在使用AI文件中的选定对象设置9层网格(我没有使用9层来缩放角!)。我只希望正确的部分保持静止,其余部分保持比例。现在,还要注意,它必须缩放,所以它必须是向量。我无法将我要重复的部分平铺为光栅化图形 所以Flex很容易,WPF不太容易。我向WPF社区提出的问题是,如何在WPF中复制9片?我曾经尝试过用AI->XAML导出器导出这些。将路径对象嵌入网格行的行为太奇怪和不一致 这是采用导出的路径并尝试

我真的很喜欢Flash/Flex中的9片功能。这是一个伟大的快速方法,使液体矢量布局。看看:

我正在使用AI文件中的选定对象设置9层网格(我没有使用9层来缩放角!)。我只希望正确的部分保持静止,其余部分保持比例。现在,还要注意,它必须缩放,所以它必须是向量。我无法将我要重复的部分平铺为光栅化图形

所以Flex很容易,WPF不太容易。我向WPF社区提出的问题是,如何在WPF中复制9片?我曾经尝试过用AI->XAML导出器导出这些。将路径对象嵌入网格行的行为太奇怪和不一致

这是采用导出的路径并尝试将其放入网格中。我应该注意到这个网格不是用来模拟9片的。我只是用它来布局对象。我只是希望下面的路径适合最右上角。它甚至不这样做

<Page
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid ShowGridLines="True">
        <Path Fill="Red" Data="F1 M 200.0,42.5 L -200.0,42.5 L -200.0,-42.5 L 200.0,-42.5 L 200.0,42.5 Z" Grid.Row="0" Grid.Column="1"/>
    </Grid>
</Page>

你有6片,不是9片

根据我有限的理解,9-slice基本上建立了一个3x3网格,其中四个角不缩放,中心顶部和底部单元格仅水平缩放,左侧和右侧中心单元格仅垂直缩放,中心水平和垂直缩放

下面的代码就是这样做的。不管它是否和9-slice完全一样,我不能告诉你,因为我从来没有真正使用过它

  <Grid.ColumnDefinitions>
    <ColumnDefinition Width="50" />
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="50" />
  </Grid.ColumnDefinitions>
  <Grid.RowDefinitions>
    <RowDefinition Height="50" />
    <RowDefinition Height="*" />
    <RowDefinition Height="50" />
  </Grid.RowDefinitions>

您的路径包含负坐标,当您在点(-200,0)处绘制某个对象时,它将在其应位于的位置左侧绘制200个像素

通过简单地向所有X坐标添加200,使您的路径基于(0,0)而不是(-200,0),您将获得此路径:

 <Path Fill="Red" Data="F1 M 400.0,42.5 L 0.0,42.5 L 0.0,-42.5 L 400.0,-42.5 L 400.0,42.5 Z" Grid.Row="0" Grid.Column="1"/>

或者,您可以使用变换将其推入到位,这也将起作用:

<Path Fill="Red" Data="F1 M 200.0,42.5 L -200.0,42.5 L -200.0,-42.5 L 200.0,-42.5 L 200.0,42.5 Z" Grid.Row="0" Grid.Column="1">
    <Path.RenderTransform>
        <TranslateTransform X="200"/>
    </Path.RenderTransform>
 </Path>