3

我使用以下代码片段来定义弹出窗口。

代码片段[XAML]:

  <Grid Margin="0,0,0,0"  Height="40">       
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="Auto" />
      <ColumnDefinition Width="19" />
      <ColumnDefinition Width="19" />
    </Grid.ColumnDefinitions>

    <TextBlock HorizontalAlignment="Stretch"
               Text="HeaderText"                         
               FontWeight="Bold"
               TextTrimming="CharacterEllipsis"
               VerticalAlignment="Center"/>
       <Grid Grid.Column="1">
         <Button Width="19" x:Name="FilterButton" Click="FilterButton_OnClick" Content="^"/>
         <Popup x:Name="FilterPanel" StaysOpen="False"   >
           <Border >
             <Grid>
               <TextBlock x:Name="tblTitle" Text="PopUp Header" Background="Red" Grid.Column="0" Grid.Row="0"/>
             </Grid>
           </Border>
         </Popup>
       </Grid>
    <TextBox Text="Test" Grid.Column="2"/>
  </Grid>

我已使用以下代码片段打开弹出窗口

代码片段[C#]:

private void FilterButton_OnClick(object sender, RoutedEventArgs e)
{
     this.FilterPanel.IsOpen = true;
}

场景:

使用按钮单击打开弹出窗口。

按 T​​ab。

焦点移动到文本框。

实际行为:

弹出窗口不关闭。

预期行为:

弹出窗口应该关闭。

为了您的参考,我附上了简单的示例。您能否对此进行查看并提供指导以归档我的要求。提前致谢。

4

1 回答 1

0

这很奇怪。我把你的代码粘贴到一个新的项目窗口中,每次都关闭弹出窗口。但是我记得当我想创建自己的自定义控件时,我遇到了类似的问题。我知道其中一件事是将 StaysOpen 设置为 false。我看到你已经这样做了。另一个是在初始化 FilterPanel 时尝试设置以下内容

FilterPanel.IsMouseCaptureWithinChanged +=FilterPanel_IsMouseCaptureWithinChanged;

void FilterPanel_IsMouseCaptureWithinChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
        if (!(bool)e.NewValue)
        { FilterPanel.IsOpen = false; } 
    }

正如我所说,当我复制您的代码时,我的代码运行良好,所以我无法测试它,但上面应该可以工作。

于 2013-07-09T08:10:38.073 回答