WPF Popup专注于数据网格

Hax*_*lit 5 wpf datagrid focus popup

我正在创建一个自定义UserControl以在DataGrid编辑模板中使用.它看起来像这样:

<UserControl
   x:Class="HR.Controls.UserPicker"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:tk="http://schemas.microsoft.com/wpf/2008/toolkit"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Grid>
        <TextBlock x:Name="PART_TextBox" Text="Hello WOrld" />
        <Popup Width="234" Height="175" IsOpen="True" StaysOpen="True"

             Placement="Bottom"
             PlacementTarget="{Binding ElementName=PART_TextBox}"
         >
            <TextBox
                  x:Name="searchTextBox"
                  Text="&gt;Enter Name&lt;"/>
        </Popup>
    </Grid>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

编辑: 我稍微缩小了代码范围.看来,如果我将一个带有文本框的Popup直接放在CellEditingTemplate中,那么文本框得到的焦点就没问题了.当我将该代码移动到UserControl时,我在编辑单元格时无法再选择文本框.

UserControl是否以焦点做了一些有趣的事情?


问题是当我在datagrid中编辑单元格时,我得到了用户控件,但我无法单击TextBox searchTextBox.当我点击它时,弹出窗口关闭,单元格返回默认值.

我已经尝试复制并粘贴用户控件中的所有代码,并将其直接粘贴到CellEditingTemplate中,并以它应该的方式进行交互.

我只是想知道UserControl是否做了一些奇怪的事情,阻止弹出窗口获得焦点,因为它直接放在CellEditingTemplate中时按预期工作?

谢谢,劳尔

小智 2

我有一个类似的问题,我创建了一个包含文本框、按钮和日历的用户控件。基本上我使用自定义验证逻辑创建自己的日期选择器。

我将此组件放入 CellEditingTemplate 中。当我按下按钮时,会显示弹出窗口,但是在任意位置单击弹出窗口会导致单元格停止编辑(因为弹出窗口正在从文本框中获取焦点)。我通过添加代码解决了这个问题,该代码表示​​如果弹出窗口打开,文本框的焦点可能不会丢失。这对我来说很有效。

另外,在用户控件的加载事件处理程序中,我将焦点放在文本框上。在您的情况下,可能是用户控件本身具有焦点。

protected override void OnPreviewLostKeyboardFocus(KeyboardFocusChangedEventArgs e) {
             // Don't allow focus to leave the textbox if the popup is open
             if (Popup.IsOpen) e.Handled = true;  
}

private void Root_Loaded(object sender, RoutedEventArgs e) {
       TextBox.Focus();
}
Run Code Online (Sandbox Code Playgroud)