来自XAML中单个Point资源的PointCollection资源?

时间:2019-09-23 11:04:38

标签: wpf xaml resourcedictionary

如果必须创建点集合作为XAML资源,则可以这样做:

<Window.Resources>
    <PointCollection x:Key="points">
        <Point>0,30</Point>
        <Point>20,50</Point>
        <Point>40,10</Point>
    </PointCollection>
</Window.Resources>

在我看来,这些要点已是资源:

<Window.Resources>
    <Point x:Key="a" X="100" Y="100"/>
    <Point x:Key="b" X="200" Y="100"/>
    <Point x:Key="b1a" X="100" Y="0"/>
    <Point x:Key="b1b" X="200" Y="0"/>
</Window.Resources>

并且这种方式(可能已经过分杀伤了)不起作用,因为X / Y不是依赖项属性:

<Window.Resources>
    <PointCollection x:Key="b1points">
        <Point X="{Binding Source={StaticResource b1a}, Path=X}"
               Y="{Binding Source={StaticResource b1a}, Path=Y}"/>
        <Point X="{Binding Source={StaticResource b1b}, Path=X}"
               Y="{Binding Source={StaticResource b1b}, Path=Y}"/>
        <Point X="{Binding Source={StaticResource b}, Path=X}"
               Y="{Binding Source={StaticResource b}, Path=Y}"/>
</Window.Resources>

该集合稍后将在Bezier细分中使用:

<PolyBezierSegment Points="{StaticResource b1points}"/>

但是这些点必须单独声明,以便可以像这样使用它们:

<Ellipse Canvas.Left="{Binding Source={StaticResource a}, Path=X}"
         Canvas.Top="{Binding Source={StaticResource a}, Path=Y}"
         Width="3" Height="3" Fill="Red"/>

有人可以在XAML中提出平均值吗?甚至没有转换器就更困难吗?

1 个答案:

答案 0 :(得分:1)

这应该有效:

<Window.Resources>
    <Point x:Key="a" X="100" Y="100"/>
    <Point x:Key="b" X="200" Y="100"/>
    <Point x:Key="b1a" X="100" Y="0"/>
    <Point x:Key="b1b" X="200" Y="0"/>

    <PointCollection x:Key="b1points">
        <StaticResource ResourceKey="b1a"/>
        <StaticResource ResourceKey="b1b"/>
        <StaticResource ResourceKey="a"/>
        <StaticResource ResourceKey="b"/>
    </PointCollection>
</Window.Resources>

...

<PolyBezierSegment Points="{StaticResource b1points}"/>

...

<Path Fill="Red">
    <Path.Data>
        <EllipseGeometry Center="{StaticResource a}" RadiusX="1.5" RadiusY="1.5"/>
    </Path.Data>
</Path>