1

Ellipse では正常に機能する DepencencyProperty (ブール値) がありますが、ArcSegment では機能しません。私は不可能なことをしていますか?これが xaml の一部です。OriginLargeArcの TemplateBindings は両方とも、ジオメトリでは機能しません。しかし、LargeArc DependencyPropertyEllipse で機能するため、私の DependencyProperty は正しく設定されているようです。

 <ControlTemplate TargetType="{x:Type nodes:TestCircle}">
     <Canvas Background="AliceBlue">
         <Ellipse Height="10" Width="10" Fill="Yellow" Visibility="{TemplateBinding LargeArc, Converter={StaticResource BoolToVisConverter}}"/>
         <Path Canvas.Left="0" Canvas.Top="0" Stroke="Black" StrokeThickness="3">
             <Path.Data>
                 <GeometryGroup>
                     <PathGeometry>
                         <PathFigure IsClosed="True" StartPoint="{TemplateBinding Origin}">
                             <LineSegment Point="150,100" />
                             <ArcSegment Point="140,150" IsLargeArc="{TemplateBinding LargeArc}" Size="50,50" SweepDirection="Clockwise"/>
                         </PathFigure>
                     </PathGeometry>
                 </GeometryGroup>
             </Path.Data>
         </Path>
     </Canvas>
 </ControlTemplate>

私が構築しようとしているのは、パイの形状が DependencyProperties によって定義され、使用される実際のグラフィックスがテンプレートにある (一種の) パイ型のユーザー コントロールであり、それらを置き換えたりカスタマイズしたりできます。言い換えれば、コード ビハインドをビジュアル フリーにしたいと考えています (これは適切な分離であると思います)。

解決策-------------------------- (私はまだ自分の質問に答えることができません)

私は自分で答えを見つけました。これは、同じ問題に遭遇した他の人に役立ちます。これが Geometry の TemplateBinding が失敗した理由です:

TemplateBinding は、DependencyProperty を別の DependencyProperty にバインドする場合にのみ機能します。

次の記事は私を正しい軌道に乗せました:http://blogs.msdn.com/b/liviuc/archive/2009/12/14/wpf-templatebinding-vs-relativesource-templatedparent.aspx

ArcSegment プロパティは DependencyProperties ではありません。したがって、上記の問題の解決策は、

<ArcSegment Point="140,150" IsLargeArc="{TemplateBinding LargeArc}"

<ArcSegment Point="140,150" IsLargeArc="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=LargeArc}"

コリン、ジオメトリで「通常の」バインディングが使用された実際の例は、私を正しい軌道に乗せました。ところで、インフォグラフィックとブログ投稿の UserControl の構成が気に入っています。そして、ねえ、コード スニペット、特にその DP 属性と、これらの DP を部分的なクラス ファイルに分離することに関する簡単なヒントは、まさに金です!

4

1 に答える 1

0

それはうまくいくはずです。当面の問題はわかりませんが、パイピース形状の Silverlight 実装を含む記事を書いたことを指摘したいと思いました。

Silverlight を使用した循環関係グラフのプロット

この形状の XAML を以下に示します。

<Style TargetType="local:NodeSegment">
  <Setter Property="Template">
    <Setter.Value>
      <ControlTemplate TargetType="local:NodeSegment"> 
          <Path Stroke="{TemplateBinding Stroke}"
                StrokeThickness="{TemplateBinding StrokeThickness}"
                Fill="{TemplateBinding Background}"
                DataContext="{Binding ViewModel}"
                x:Name="segmentShape">
            <Path.Data>
              <PathGeometry>
                <PathFigure StartPoint="{Binding Path=S1}"
                            IsClosed="True">
                  <ArcSegment Point="{Binding Path=S2}"
                              SweepDirection="Counterclockwise"
                              IsLargeArc="{Binding Path=IsLargeArc}"
                              Size="{Binding Path=OuterSize}"/>
                  <LineSegment Point="{Binding Path=S3}"/>
                  <ArcSegment Point="{Binding Path=S4}"
                              SweepDirection="Clockwise"
                              IsLargeArc="{Binding Path=IsLargeArc}"
                              Size="{Binding Path=InnerSize}"/>
                </PathFigure>
              </PathGeometry>
            </Path.Data>
          </Path>                      
        </Canvas>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>
于 2012-04-03T21:41:33.757 に答える