Получить размер всплывающего окна в выпадающем списке во время выполнения
Я пытаюсь получить ширину и высоту выпадающего окна Silverlight ComboBox. к несчастью ActualWidth
а также ActualHeight
возвращают 0 всегда.
3 ответа
Я сам нашел решение этой проблемы: перед измерением нужно установить значение "IsOpen" всплывающего окна в значение "истина", а затем вернуть значение "ложь". Это единственный способ заставить это работать.
<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;
}
Но это не очень хороший способ.
Вы не можете получить фактический размер, не отображая всплывающее окно. Это означает, что ActualSizes будет 0, если всплывающее окно скрыто. Это является следствием того, что WPF выполняет макет и логику рендеринга для вас.
Вы могли бы получить запрошенную высоту всплывающего окна, выполнив проход Измерение для самого всплывающего окна. Если всплывающее окно еще не создано, у вас все еще проблемы. (И он не может быть создан, пока не появится в первый раз.)