WPF - неясное поведение всплывающего окна на TabControl - PullRequest
0 голосов
/ 27 января 2019

Я создал текстовое поле автозаполнения в качестве пользовательского элемента управления в 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 , всплывающее окно имеет значение , отображаемое .enter image description here

Когда я ввожу Tab_1 , всплывающее окно не отображается .enter image description here

Когда я возвращаюсь к Tab_0 , всплывающее окно больше не отображается .enter image description here

Может ли кто-нибудь помочь объяснить причину такого поведения?

ОБНОВЛЕНИЕ 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;
}
...