我对ActualWidth或ActualHeight是如何工作的,或者它是如何计算出来的,感到有点困惑。
<Ellipse Height="30" Width="30" Name="rightHand" Visibility="Collapsed">
<Ellipse.Fill>
<ImageBrush ImageSource="Images/Hand.png" />
</Ellipse.Fill>
</Ellipse>当我使用上面的代码时,我得到了ActualWidth和ActualHeight的30。但是当我以编程方式定义一个椭圆时,ActualWidth和ActualHeight是0,即使我定义了(最大)高度和(最大)宽度属性-我不明白它怎么会是0?
发布于 2012-03-14 02:03:21
ActualWidth和ActualHeight是在调用Measure和Arrange之后计算的。
在将控件插入可视化树之后,WPF的布局系统会自动调用它们(在DispatcherPriority.Render IMHO,这意味着它们将排队等待执行,结果不会立即可用)。
您可以通过在DispatcherPriority.Background上排队操作或手动调用这些方法来等待它们变得可用。
dispatcher变体的示例:
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));https://stackoverflow.com/questions/9689513
复制相似问题