Ellipse では正常に機能する DepencencyProperty (ブール値) がありますが、ArcSegment では機能しません。私は不可能なことをしていますか?これが xaml の一部です。OriginとLargeArcの TemplateBindings は両方とも、ジオメトリでは機能しません。しかし、LargeArc DependencyPropertyはEllipse で機能するため、私の 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 を部分的なクラス ファイルに分離することに関する簡単なヒントは、まさに金です!