2017-05-28 8 views
0

グリッドに円を描く必要があります。そのグリッドは、その親グリッドのColumn/Row定義で定義された高さと幅に比例して適応しなければなりません。 私はストレッチを置くと、それはすべてのスペースを埋めるだろうと私はそれが円になりたいときに省略記号になります。短い親グリッドで[OK]をC#WPF親を埋めるように伸びる円を描き、コードの後ろに円を残す方法

は、私は次のコードを追加ルーチンで、その enter image description here

のように比例適応:

public void RadialPercentage(Grid grd) 
{ 
    Ellipse elpExt = new Ellipse(); 
    elpExt.Stroke = Brushes.Green; 
    elpExt.StrokeThickness = 4; 
    //elpExt.Margin = new Thickness(0); 
    //elpExt.HorizontalAlignment = HorizontalAlignment.Center; 
    elpExt.VerticalAlignment = VerticalAlignment.Stretch; 
    grd.Children.Add(elpExt); 

    Ellipse elpInt = new Ellipse(); 
    elpInt.Stroke = Brushes.Blue; 
    elpInt.StrokeThickness = 4; 
    elpInt.Margin = new Thickness(20); 
    //elpInt.Width = elpInt.Height = dim-20; 
    //elpInt.HorizontalAlignment = HorizontalAlignment.Center; 
    elpInt.VerticalAlignment = VerticalAlignment.Stretch; 
    grd.Children.Add(elpInt); 
    return; 
} 

をその効果は以下の通りです:

enter image description here

このように縦と横の両方に伸びます水平方向の制約ではなく垂直方向である。私が楕円を中心にするように設定すると、崩壊します。

この問題を解決するには、これが正しいことがわかりません。私は親グリッドの重量/高さを調べようとしましたが、明らかにこれらの値と実際の値の両方がゼロに設定されています。

おかげで何楕円のActualHeightに結合し、CenterからHorizontalAlignmentを設定しWidth年代の設定について パトリック

+0

は[**ストレッチ**](https://msdn.microsoft.com/en-us/library/system.windows.shapes.shape.stretch(V =でチラッを持っていますvs.110).aspx)... – elgonzo

答えて

2

を支援するために?このような何か:

var ellipse = new Ellipse(); 

var binding = new Binding(Ellipse.ActualHeightProperty.Name) 
{ 
    RelativeSource = new RelativeSource(RelativeSourceMode.Self), 
    Mode = BindingMode.OneWay 
}; 

ellipse.VerticalAlignment = VerticalAlignment.Stretch; 
ellipse.HorizontalAlignment = HorizontalAlignment.Center; 

BindingOperations.SetBinding(ellipse, Ellipse.WidthProperty, binding); 
+0

グリッドセルの高さがその幅よりも大きい場合はどうなりますか? .... – elgonzo

+0

はい、理論的には私の場合ではないかもしれません。ありがとう、マキシム! – Patrick

+0

@elgonzoその後、私の解決策は動作しません。しかし、 'Stretch.Uniform'の使用は' Horizo​​ntalAlignment'や 'VerticalAlignment'が' Center'の場合には機能しませんので普遍的な解決策でもありません。 – Maxim

関連する問題