我正在尝试获取Silverlight ComboBox的下拉窗口的宽度和高度。
很遗憾,ActualWidth
和ActualHeight
始终返回0。
答案 0 :(得分:2)
<ComboBox x:Name="comboBox" Height="20" Width="120">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel SizeChanged="StackPanel_SizeChanged"/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
private void StackPanel_SizeChanged(object sender, SizeChangedEventArgs e)
{
var w= e.NewSize.Width;
var h= e.NewSizeHeight;
}
但这不是一个好方法。
答案 1 :(得分:1)
如果不实际渲染弹出窗口,则无法获得实际大小。这意味着如果弹出窗口被隐藏,则ActualSizes将为0。这是WPF为您执行布局和渲染逻辑的结果。
您可以通过在弹出窗口上执行Measure传递来获取弹出窗口的请求高度。如果还没有创建弹出窗口,你仍然会遇到麻烦。 (它可能在第一次显示之前就不会被创建。)
答案 2 :(得分:0)
我自己找到了一个解决方案:你必须在测量之前将弹出窗口的“IsOpen”设置为true,然后将其设置为false。这是我能让它发挥作用的唯一方法。