在运行时获取组合框弹出窗口的大小

时间:2011-04-13 15:48:16

标签: silverlight popup size actualwidth actualheight

我正在尝试获取Silverlight ComboBox的下拉窗口的宽度和高度。 很遗憾,ActualWidthActualHeight始终返回0。

3 个答案:

答案 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。这是我能让它发挥作用的唯一方法。