gpt4 book ai didi

数据网格中的 WPF 弹出焦点

转载 作者:行者123 更新时间:2023-12-04 14:07:25 25 4
gpt4 key购买 nike

我正在创建要在 DataGrid 编辑模板中使用的自定义 UserControl。
它看起来像这样:

<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>

编辑:
我已经缩小了一些代码。
看来,如果我直接在 CellEditingTemplate 中放置一个带有文本框的弹出窗口,则文本框获得焦点没问题。当我将该代码移动到 UserControl 时,我无法在编辑单元格时再选择文本框。

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

问题是当我编辑数据网格中的单元格时,我显示用户控件,但无法单击 TextBox searchTextBox。当我点击它时,弹出窗口关闭,单元格恢复为默认值。

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

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

谢谢,
劳尔

最佳答案

我有一个类似的问题,其中 Popup嵌入 UserControl因为当单击它的某些区域时,单元格编辑模板将关闭。问题原来是 WPF Toolkit(大概是 WPF4)DataGrid鼠标左键点击非常贪婪。即使您处理它们并将 Handled 设置为 true,网格也可以将它们解释为单击不同的单元格。

thread有完整的细节,但修复是 Hook 到 DataGrid.CellEditEnding事件并取消结束编辑:

private static void DataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
if (e.Column.GetType() == typeof(DataGridTemplateColumn))
{
var popup = GetVisualChild<Popup>(e.EditingElement);
if (popup != null && popup.IsOpen)
{
e.Cancel = true;
}
}
}

private static T GetVisualChild<T>(DependencyObject visual)
where T : DependencyObject
{
if (visual == null)
return null;

var count = VisualTreeHelper.GetChildrenCount(visual);
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(visual, i);

var childOfTypeT = child as T ?? GetVisualChild<T>(child);
if (childOfTypeT != null)
return childOfTypeT;
}

return null;
}

这完全归功于 Actipro thread .

关于数据网格中的 WPF 弹出焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1784977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com