重复使用XAML路径对象路径、重复使用、对象、XAML

2023-09-03 02:29:33 作者:我卡在门缝里了>_<

我有一个路径(星图):

 &LT;路径X:名称=NiceStarStrokeThickness =10行程=#FF000000StrokeMiterLimit =1数据=F1中号126.578613,11.297852大号162.373535,83.825684大号242.412598,95.456055大号184.495605,151.911133大号198.167480,231.626953大号126.578613,193.990234大号54.988770,231.626953大号68.661621,151.911133大号10.744629,95.456055大号90.783691,83.825684大号126.578613,11.297852 Z&GT;
&LT; Path.Fill&GT;
&LT;放射渐变MappingMode =绝对渐变=390.395508,448.130371中心=390.395508,448.130371半径=113.034821半径=113.034821&GT;
&LT; RadialGradientBrush.Transform&GT;
&LT; MatrixTransform矩阵=1,0,-0,-1,-263.816895,569.592773/&GT;
&LT; /RadialGradientBrush.Transform>
&所述;渐变停止偏移=0颜色=#FF00FF00/&GT;
&所述;渐变停止偏置值=1颜色=#ff006736/&GT;
&LT; /&画笔GT;
&LT; /Path.Fill>
&LT; /路径&GT;
 

现在我想复制这条道路数次(只指的是NiceStar)。我能做到这一点在纯XAML?

我可以用它一次,这样做的:

 &LT;装饰儿童={的StaticResource星}/&GT;
 

不过,我不能重复这一行。我的编译器说:

 指定的元素已经是另一个元素的逻辑子。首先断开它。
 
UI培训之教你使用AI绘制一组清新简约的微图标

解决方案

创建样式。

 &LT;风格X:关键=NiceStarPath的TargetType ={X:键入路径}&GT;
    &LT; setter属性=StrokeThicknessVALUE =10/&GT;
    &LT; setter属性=行程值=#FF000000/&GT;
    &LT; setter属性=StrokeMiterLimit值=1/&GT;
    &LT; setter属性=数据值=F1中号126.578613,11.297852大号162.373535,83.825684大号242.412598,95.456055大号184.495605,151.911133大号198.167480,231.626953大号126.578613,193.990234大号54.988770,231.626953大号68.661621,151.911133大号10.744629,95.456055大号90.783691 ,83.825684大号126.578613,11.297852 Z/&GT;
    &LT; setter属性=填充&GT;
        &LT; Setter.Value&GT;
            &LT;放射渐变MappingMode =绝对渐变=390.395508,448.130371中心=390.395508,448.130371半径=113.034821半径=113.034821&GT;
                &LT; RadialGradientBrush.Transform&GT;
                    &LT; MatrixTransform矩阵=1,0,-0,-1,-263.816895,569.592773/&GT;
                &LT; /RadialGradientBrush.Transform>
                &所述;渐变停止偏移=0颜色=#FF00FF00/&GT;
                &所述;渐变停止偏置值=1颜色=#ff006736/&GT;
            &LT; /&画笔GT;
        &LT; /Setter.Value>
    &LT; /二传手&GT;
&LT; /样式和GT;
 

...

 &LT;路径类型={的StaticResource NiceStarPath}/&GT;
 

I have a Path (a star figure):

<Path x:Name="NiceStar" StrokeThickness="10" Stroke="#ff000000" StrokeMiterLimit="1" Data="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">
	<Path.Fill>
		<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>
	</Path.Fill>
</Path>

Now I want to duplicate this Path several times (just refering to "NiceStar"). Can I do this in pure XAML?

I can use it once, by doing this:

<Decorator Child="{StaticResource star}" />

However, I cannot duplicate this line. My compiler says:

Specified element is already the logical child of another element. Disconnect it first.

解决方案

Create a style.

<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}"/>