У меня есть текстовое поле, сложенное поверх ComboBox. TextBox становится выше (с помощью анимации), когда получает фокус, и сжимается обратно, когда теряет фокус.
Проблемы начинаются, когда TextBox теряет фокус на ComboBox. Когда это происходит, всплывающее окно выбора (часть, которая «опускается») появляется как раз под ComboBox, как и ожидалось, но, поскольку ComboBox начинает двигаться вверх (так как TextBox выше сокращается), всплывающее окно выбора не следует, и теперь отображается отдельно от ComboBox.
Предположительно, это связано с тем, что всплывающее окно выбора (как и все всплывающие окна) не является частью того же визуального дерева, что и TextBox и ComboBox, поэтому его расположение не пересчитывается в процессе анимации.
Как мне сохранить мой ComboBox целиком?
Ниже приведен фрагмент, который вы можете вставить в XamlPad, чтобы воспроизвести это. Любая помощь очень ценится!
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:sys="clr-namespace:System;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" >
<StackPanel Width="100" Orientation="Vertical">
<TextBox Height="19">
<TextBox.Triggers>
<EventTrigger RoutedEvent="UIElement.GotFocus">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard TargetProperty="Height">
<DoubleAnimation From="19" To="100" Duration="0:0:0.2"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
<EventTrigger RoutedEvent="UIElement.LostFocus">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard TargetProperty="Height">
<DoubleAnimation From="100" To="19" Duration="0:0:0.2"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</TextBox.Triggers>
</TextBox>
<ComboBox>
<ComboBoxItem>Item 1</ComboBoxItem>
<ComboBoxItem>Item 2</ComboBoxItem>
</ComboBox>
</StackPanel>
</Page>
Это также было опубликовано как ошибка на сайте Microsoft Connect:
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=422254