【问题标题】:PointCollection resource from individual Point resources in XAML?XAML 中各个 Point 资源的 PointCollection 资源?
【发布时间】:2019-09-23 11:04:38
【问题描述】:

如果我必须创建一个点集合作为 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>

该集合稍后用于贝塞尔线段:

<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 中的平均值?甚至更难,没有转换器?

【问题讨论】:

  • 为什么没有提供点和 PointCollection 的视图模型?
  • @Clemens:我正在学习 XAML,并且想知道如何仅在 XAML 中做到这一点
  • 请注意,如果您想以某个点为中心绘制椭圆,则必须从 Canvas.Left 和 Canvas.Top 中减去其宽度和高度的一半。或者您使用带有 EllipseGeometry 的 Path,它已经具有 Point 类型的 Center 属性。
  • @Clemens:当然。
  • 而且即使你使用单独的Points作为绑定源对象,你也不需要严格地声明它们为单独的资源,因为你可以写Center="{Binding Source={StaticResource points}, Path=[0]}"

标签: wpf xaml resourcedictionary


【解决方案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>

【讨论】:

  • 为什么我没想到这个??感谢您提供额外的椭圆提示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多