WPF-TabControl上弹出窗口的行为不明确

时间:2019-01-26 23:34:20

标签: c# wpf popup tabcontrol

我在WPF中创建了一个自动完成文本框作为用户控件。我使用弹出窗口来确保我的列表框始终位于其他控件的顶部。

如果将用户控件放在TabControl的不同TabItem上,我会意识到行为不清楚。

我创建了一个简单的示例来说明这一点。我在两个具有相同XAML的不同tab控件上放置了一个弹出窗口。

<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

当我返回到标签_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方法),弹出窗口不会显示。

当我使用GotFocus处理程序返回Tab0时,将显示弹出窗口。

这正是我的用户控件所面临的问题(请记住,这里的代码只是一个简单的示例)。

更新2

有了该代码,它就可以工作-但这对我来说还是没有道理的...

private void ParentTextBox_Tab_1_GotFocus(object sender, RoutedEventArgs e)
{
    PopupTest_Tab_1.IsOpen = false;
    PopupTest_Tab_1.IsOpen = true;
}

0 个答案:

没有答案