0

我正在尝试获取 Silverlight ComboBox 下拉窗口的宽度和高度。不幸的是ActualWidthActualHeight总是返回 0。

4

3 回答 3

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;
}

但这不是一个好方法。

于 2011-04-13T19:47:53.197 回答
1

如果不实际渲染弹出窗口,您将无法获得实际大小。这意味着如果弹出窗口被隐藏,ActualSizes 将为 0。这是 WPF 为您执行布局和呈现逻辑的结果。

您可以通过对弹出窗口本身执行测量传递来获得弹出窗口的请求高度。如果尚未创建弹出窗口,那么您仍然有麻烦。(并且它可能在第一次显示之前不会被创建。)

于 2011-04-15T14:35:15.417 回答
0

我自己找到了解决方案:您必须在测量之前将弹出窗口的“IsOpen”设置为 true,然后将其设置回 false。这是我让它工作的唯一方法。

于 2011-04-15T13:26:45.180 回答