2

ActualWidthどのように、またはどのように機能するか、またはActualHeightそれがどのように計算されるかについて、私は少し混乱しています。

<Ellipse Height="30" Width="30" Name="rightHand" Visibility="Collapsed">
    <Ellipse.Fill>
        <ImageBrush ImageSource="Images/Hand.png" />
    </Ellipse.Fill>
</Ellipse>

上記のコードを使用すると、ActualWidthとに対して 30 が得られActualHeightます。しかし、プログラムで Ellipse を定義すると、(max)height および (max)width 属性を定義しても、ActualWidthandActualHeightは 0 になります。0 になる方法がわかりません。

4

1 に答える 1

7

ActualWidthとは、とActualHeightを呼び出した後に計算されます。MeasureArrange

WPF のレイアウト システムは、コントロールをビジュアル ツリーに挿入した後、それらを自動的に呼び出します ( DispatcherPriority.RenderIMHO では、実行のためにキューに入れられ、結果がすぐに利用できないことを意味します)。でアクションをキューに入れるか、メソッドを手動で呼び出して、
それらが使用可能になるのを待つことができます。DispatcherPriority.Background

ディスパッチャ バリアントの例:

Ellipse ellipse = new Ellipse();

ellipse.Width = 150;
ellipse.Height = 300;

this.grid.Children.Add(ellipse);

this.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() =>
{
    MessageBox.Show(String.Format("{0}x{1}", ellipse.ActualWidth, ellipse.ActualHeight));
}));

明示的な呼び出しの例:

Ellipse ellipse = new Ellipse();

ellipse.Width = 150;
ellipse.Height = 300;

ellipse.Measure(new Size(1000, 1000));
ellipse.Arrange(new Rect(0, 0, 1000, 1000));

MessageBox.Show(String.Format("{0}x{1}", ellipse.ActualWidth, ellipse.ActualHeight));
于 2012-03-13T18:03:21.053 に答える