2

我对如何ActualWidthActualHeight如何工作或如何计算有点困惑。

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

当我使用上面的代码时,我得到 30ActualWidthActualHeight. 但是当我以编程方式定义椭圆时,ActualWidthandActualHeight为 0,即使我定义了 (max)height 和 (max)width 属性 - 我不明白它怎么可能是 0?

4

1 回答 1

7

ActualWidthandActualHeight在调用Measureand之后计算Arrange

WPF 的布局系统在将控件插入可视化树后自动调用它们(在DispatcherPriority.Render恕我直言,这意味着它们将排队等待执行并且结果不会立即可用)。您可以通过在) 处排队操作或手动调用方法
来等待它们可用。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 回答