Я бы предложил использовать запрос bool в сочетании с предложением should . U также нужно будет использовать предложение sort на вашем поле.
Создать стиль.
<Style x:Key="NiceStarPath" TargetType="{x:Type Path}">
<Setter Property="StrokeThickness" Value="10"/>
<Setter Property="Stroke" Value="#FF000000"/>
<Setter Property="StrokeMiterLimit" Value="1"/>
<Setter Property="Data" Value="F1 M 126.578613,11.297852 L 162.373535,83.825684 L 242.412598,95.456055 L 184.495605,151.911133 L 198.167480,231.626953 L 126.578613,193.990234 L 54.988770,231.626953 L 68.661621,151.911133 L 10.744629,95.456055 L 90.783691,83.825684 L 126.578613,11.297852 Z"/>
<Setter Property="Fill">
<Setter.Value>
<RadialGradientBrush MappingMode="Absolute" GradientOrigin="390.395508,448.130371" Center="390.395508,448.130371" RadiusX="113.034821" RadiusY="113.034821">
<RadialGradientBrush.Transform>
<MatrixTransform Matrix="1,0,-0,-1,-263.816895,569.592773" />
</RadialGradientBrush.Transform>
<GradientStop Offset="0" Color="#ff00ff00"/>
<GradientStop Offset="1" Color="#ff006736"/>
</RadialGradientBrush>
</Setter.Value>
</Setter>
</Style>
...
<Path Style="{StaticResource NiceStarPath}"/>
Конечно, просто определите стиль для пути, и затем вы сможете использовать его как статический ресурс:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Page.Resources>
<Style x:Key="StarStyle" TargetType="Path">
<Setter>
<Setter.Property>Fill</Setter.Property>
<Setter.Value>
<RadialGradientBrush MappingMode="Absolute"
GradientOrigin="390.395508,448.130371" Center="390.395508,448.130371"
RadiusX="113.034821" RadiusY="113.034821">
<RadialGradientBrush.Transform>
<MatrixTransform Matrix="1,0,-0,-1,-263.816895,569.592773" />
</RadialGradientBrush.Transform>
<GradientStop Offset="0" Color="#ff00ff00"/>
<GradientStop Offset="1" Color="#ff006736"/>
</RadialGradientBrush>
</Setter.Value>
</Setter>
<Setter Property="StrokeThickness" Value="10" />
<Setter Property="Stroke" Value="#ff000000" />
<Setter Property="StrokeMiterLimit" Value="1" />
<Setter Property="Data" Value="F1 M 126.578613,11.297852 L 162.373535,83.825684 L 242.412598,95.456055 L 184.495605,151.911133 L 198.167480,231.626953 L 126.578613,193.990234 L 54.988770,231.626953 L 68.661621,151.911133 L 10.744629,95.456055 L 90.783691,83.825684 L 126.578613,11.297852 Z"/>
</Style>
</Page.Resources>
<StackPanel>
<Path Style="{StaticResource StarStyle}" />
<Path Style="{StaticResource StarStyle}" />
</StackPanel>
</Page>
В примечании по теме: (хотя, вероятно, не отвечая напрямую на ваш вопрос), вы также можете объявить FrameworkElement как ресурс, дать ему ключ, и, если вы добавите x: Shared = "False"
, вы снова сможете получить доступ к ресурсу и снова в коде.
Вот пример псевдокодирования:
<Window ....>
<Window.Resources>
<Ellipse x:Key="ReusableEllipse" x:Shared="False" ...>
<Ellipse.Fill>
<!--STUFF-->
</Ellipse.Fill>
</Ellipse>
</Window.Resources>
<Canvas x:Name="drawCanvas" Background="White"/>
</Window>
Затем в коде вы можете получить доступ к фигуре с ресурсами и повторно использовать ее столько раз, сколько потребуется.
Ellipse tempRect = (Ellipse)FindResouce("ReusableEllipse");
Я бы превратил путь в DrawingBrush . Это действительно легко сделать в режиме наложения, просто выберите путь, Инструменты> Создать ресурс кисти> Создать ресурс DrawingBrush. Тогда у вас будет кисть в ваших ресурсах, готовая к повторному использованию. Я ожидаю, что производительность будет довольно хорошей, поскольку кисть не интерактивна и может использоваться повторно.
Вот XAML:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="640" Height="480">
<Window.Resources>
<DrawingBrush x:Key="NiceStarBrush" Viewbox="0,0,250,240" ViewboxUnits="Absolute">
<DrawingBrush.Drawing>
<GeometryDrawing Geometry="F1M126.578613,11.297852L162.373535,83.825684 242.412598,95.456055 184.495605,151.911133 198.16748,231.626953 126.578613,193.990234 54.98877,231.626953 68.661621,151.911133 10.744629,95.456055 90.783691,83.825684 126.578613,11.297852z">
<GeometryDrawing.Brush>
<RadialGradientBrush MappingMode="Absolute" Center="390.395508,448.130371" GradientOrigin="390.395508,448.130371" RadiusX="113.034821" RadiusY="113.034821">
<RadialGradientBrush.Transform>
<MatrixTransform Matrix="1,0,0,-1,-263.816895,569.592773"/>
</RadialGradientBrush.Transform>
<GradientStop Color="Lime" Offset="0"/>
<GradientStop Color="#FF006736" Offset="1"/>
</RadialGradientBrush>
</GeometryDrawing.Brush>
<GeometryDrawing.Pen>
<Pen Brush="Black" DashCap="Flat" EndLineCap="Flat" LineJoin="Miter" MiterLimit="1" StartLineCap="Flat" Thickness="10">
<Pen.DashStyle>
<DashStyle/>
</Pen.DashStyle>
</Pen>
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Window.Resources>
<Grid x:Name="LayoutRoot">
<Rectangle Margin="181,115,0,0" Fill="{DynamicResource NiceStarBrush}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="50" Height="46" />
</Grid>
</Window>
Другой вариант - превратить перенос пути в источник изображения с помощью DrawingImage