Dom*_*c K 1 c# wpf actualwidth
所以我读过它ActualWidth可能等于0,直到满载为止.我添加了它的事件处理程序,以确保它已完全加载:
text.AddHandler(TextBlock.LoadedEvent, new RoutedEventHandler(textBlock_Loaded));
Run Code Online (Sandbox Code Playgroud)
在这种情况textBlock_Loaded下,我有:
TextBlock tb = sender as TextBlock;
textBlockWidth = tb.ActualWidth;
Run Code Online (Sandbox Code Playgroud)
我需要textBlockWidth在main方法中使用变量,但每次我在我的Main方法中写入textBlockWidth的值时,我得到0.
所以这个问题是,ActualWidth在执行我的操作之前,如何确保不是0?由于WPF是事件驱动的,有没有一种方法可以在完成时触发某些方法,而不是之前?否则,它将返回0.
为什么存储实际宽度?为什么不存储对控件的引用并在您真正需要时获得实际宽度?
说过我不明白为什么你的代码失败因为使用加载的事件应该足够好了.根据Object Lifetime Events MSDN页面:
Loaded事件在最终渲染之前引发,但在布局系统计算出所有必要的渲染值之后.
因此,所有控件都应设置其最终位置和大小值.也:
Loaded事件在整个元素树(特别是逻辑树)中作为协调工作引发.当树中的所有元素都处于被认为已加载的状态时,首先在根元素上引发Loaded事件.然后在每个子元素上连续引发Loaded事件.