Я создал текстовое поле автозаполнения в качестве пользовательского элемента управления в WPF.Я использовал всплывающее окно, чтобы убедиться, что мой список всегда находится поверх других элементов управления.
Я понял неясное поведение, если я помещаю пользовательский элемент управления в разные элементы TabItems элемента TabControl.
Iсоздал простой пример, чтобы проиллюстрировать это.Я помещаю всплывающее окно на два разных элемента управления табуляции с одинаковым XAML.
<TabControl>
<TabItem Header="Tab_0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<TextBox Name="ParentTextBox_Tab_0" Grid.Row="0" HorizontalAlignment="Stretch"/>
<Popup Name="PopupTest_Tab_0" IsOpen="True"
PlacementTarget="{Binding ElementName = ParentTextBox_Tab_0 }"
Placement="Bottom">
<TextBox Name="PU_TextBox_Tab_0" Text="PU_TextBox_Tab_0-Text"/>
</Popup>
</Grid>
</TabItem>
<TabItem Header="Tab_1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<TextBox Name="ParentTextBox_Tab_1" Grid.Row="0" HorizontalAlignment="Stretch"/>
<Popup Name="PopupTest_Tab_1" IsOpen="True"
PlacementTarget="{Binding ElementName = ParentTextBox_Tab_1 }"
Placement="Bottom">
<TextBox Name="PU_TextBox_Tab_1" Text="PU_TextBox_Tab_1-Text"/>
</Popup>
</Grid>
</TabItem>
</TabControl>
Когда я сейчас ввожу Tab_0 , всплывающее окно имеет значение , отображаемое .
Когда я ввожу Tab_1 , всплывающее окно не отображается .
Когда я возвращаюсь к Tab_0 , всплывающее окно больше не отображается .
Может ли кто-нибудь помочь объяснить причину такого поведения?
ОБНОВЛЕНИЕ 1
На основании комментарияниже я добавил следующее:
private void ParentTextBox_Tab_0_GotFocus(object sender, RoutedEventArgs e)
{
PopupTest_Tab_0.IsOpen = true;
}
private void ParentTextBox_Tab_1_GotFocus(object sender, RoutedEventArgs e)
{
PopupTest_Tab_1.IsOpen = true;
}
Тем не менее - при первом входе в Tab1 (и вызывается метод GotFocus) всплывающее окно не отображается.
Когда я возвращаюсьна Tab0 с помощью обработчика GotFocus отображается всплывающее окно.
Это как раз та проблема, с которой я сталкиваюсь в своем пользовательском элементе управления (имейте в виду, что здесь приведен простой код).
ОБНОВЛЕНИЕ 2
С этим кодом это работает - но это все равно не имеет смысла для меня ...
private void ParentTextBox_Tab_1_GotFocus(object sender, RoutedEventArgs e)
{
PopupTest_Tab_1.IsOpen = false;
PopupTest_Tab_1.IsOpen = true;
}