2016-06-12 18 views
0

バインディングをどのようにして、デザイン時にパスをレンダリングする必要がある3つのpoisitionを再計算できるようにするか。誰かがカスタムコントロールのサイズを変更したら?WPF usercontrol circlesector button

今、私はちょうど.. SizeChangedイベントに接続しようとしている

<Grid DataContext="{Binding ElementName=mainbutton}"> 
    <Path Stroke="{Binding Path=BorderBrush}" StrokeThickness="1" Fill="{Binding Path=Foreground}"> 
     <Path.Data> 
      <PathGeometry> 
       <PathGeometry.Figures> 
        <PathFigureCollection> 
         <PathFigure IsClosed="True" StartPoint="{Binding Path= CenterPoint}"> 
          <PathFigure.Segments> 
           <PathSegmentCollection> 
            <!--<Path Stroke="Black" StrokeThickness="1" Data="M 180,180 L 271.9,88.1 A130,130 0 0 0 88.1,88.1 Z"/>--> 
            <LineSegment Point="{Binding Path= TopLeftPoint}"/> 
            <ArcSegment Point="{Binding Path= TopRightPoint}" Size="{Binding Path= Size}" IsLargeArc="False" SweepDirection="Clockwise" RotationAngle="0"/> 
           </PathSegmentCollection> 
          </PathFigure.Segments> 
         </PathFigure> 
        </PathFigureCollection> 
       </PathGeometry.Figures> 
      </PathGeometry> 
     </Path.Data> 
    </Path> 
</Grid> 

答えて

0

もuが「プロパティ変更トリガ」を追加し、サイズ変更イベントに添付して、オブジェクトを設定することができ、縦\水平知的財産権

here's an example

0

私はこれに対する解決策を見つけました。

XAMLファイル:

 <Path Stroke="CornflowerBlue" StrokeThickness="5" StrokeStartLineCap="Round" StrokeEndLineCap="Round"> 
     <Path.Data> 
      <PathGeometry> 
       <PathFigure StartPoint="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ArcProgress}},Path=StartPoint, Mode=OneWay}"> 
        <ArcSegment Point="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ArcProgress}},Path=EndPoint, Mode=OneWay}" 
           Size="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ArcProgress}},Path=CircleSize, Mode=OneWay}" SweepDirection="Clockwise" /> 
       </PathFigure> 
      </PathGeometry> 
     </Path.Data> 
    </Path> 

とCSファイルの

public partial class ArcProgress : System.Windows.Controls.UserControl 
{ 
    public static readonly DependencyProperty ProgressProperty = 
     DependencyProperty.Register("Progress", typeof(double), typeof(ArcProgress), new FrameworkPropertyMetadata(0.0, FrameworkPropertyMetadataOptions.AffectsRender,(o, e) => { ((ArcProgress)o).UpdateGeometry(); })); 

    static ArcProgress() 
    { 
     WidthProperty.OverrideMetadata(typeof(ArcProgress), new FrameworkPropertyMetadata((o, e) => { ((ArcProgress)o).UpdateGeometry(); })); 
     HeightProperty.OverrideMetadata(typeof(ArcProgress), new FrameworkPropertyMetadata((o, e) => { ((ArcProgress)o).UpdateGeometry(); })); 

    }  

    private void UpdateGeometry() 
    { 
     if (!double.IsNaN(Width) && !double.IsNaN(Height)) 
     { 

      double x = (Progress/100.0) * Width; 
      double y = (Progress/100.0) * Height; 
      StartPoint = new Point(x, 0); 
      EndPoint = new Point(0, y); 
      CircleSize = new Size(x, y); 
     } 
    } 

このスニペットは別のコンポーネントのものです。

関連する問題