WPF怎么让datagrid的某个cell下的模板控比如textBox,获取焦点?要光标一闪一闪的效果,便于用户输入

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF怎么让datagrid的某个cell下的模板控比如textBox,获取焦点?要光标一闪一闪的效果,便于用户输入相关的知识,希望对你有一定的参考价值。

不要单纯的选中,需要光标一闪一闪的那种效果,才能方便用户输入。以下代码是获得cell的焦点(但只是选中了某个cell)
int i = 0;
private void button1_Click(object sender, RoutedEventArgs e)

if (i < this.dataGrid.Items.Count)

DataGridRow dr = (DataGridRow)this.dataGrid.ItemContainerGenerator.ContainerFromIndex(i);
DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(dr);
DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(0); //取第0列每行单元格
cell.Focus();
i++;

else

i = 0;

public static T GetVisualChild<T>(Visual parent) where T : Visual

T child = default(T);
int numVisuals = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < numVisuals; i++)

Visual v = (Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T;
if (child == null)

child = GetVisualChild<T>(v);

if (child != null)

break;


return child;

给cell内的TextBox添加 Loaded事件
XAML
<DataGridTemplateColumn Header="数量">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="Binding 数量" BorderBrush="x:Null" Background="x:Null" BorderThickness="0" Loaded="TextBox_Loaded" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

cs
private void TextBox_Loaded(object sender, RoutedEventArgs e)

TextBox testTB = sender as TextBox;
testTB.Focus();
参考技术A

试试这句呢:

cell.IsEditing = true;

追问

不行,cell里放的textBox本来就是IsEditing = true

追答

你自定义了列模板没有?

追问

我自定义了的

追答

能否共享源码看调试下?

wpf datagrid怎么得到焦点?用datagrid.focus()不行

如果用鼠标点WPF上的一个DataGrid控件,然后用键盘UP、Down方向键上下移动,则当前行也上下移动,但是如果用datagrid.focus()方法都焦点设置到datagrid控件,那么就不会出现上面的效果,请问这是怎么回事呢?

参考技术A 你得让里面行获得焦点
比如第一行:

var row = dataGrid.ItemsContainerGenerator.ContainerFromIndex(0) as FrameworkElement;
if(row != null)
row.Focus();追问

这样不行,得不到焦点

追答

调整到Input优先级呢?

row.Dispatcher.BeginInvoke(new Action(() => row.Focus()));

追问

还是不行

追答

你看看你的row到底是不是null?
我这边试了是可以的,唯一的问题就是没有高亮,加上selectedindex = 0就行了

对了,应该是dataGrid.ItemContainerGenerator,原来多写多了一个s

追问

这个之前就试过了,只是得到高亮显示,并没有获得焦点

追答

你按上下键不能动?给个邮箱,我发工程给你

另外,如果你的意思是要Cell那个粗框的效果,再找到Cell Focus就行了

追问

只要datagrid得到焦点,上下键就能动了,现在就是获取不到焦点,发给我吧,443936190@qq.com 非常感谢

追答

已发

本回答被提问者采纳

以上是关于WPF怎么让datagrid的某个cell下的模板控比如textBox,获取焦点?要光标一闪一闪的效果,便于用户输入的主要内容,如果未能解决你的问题,请参考以下文章

wpf datagrid cell 设置焦点

怎么知道用户选择的wpf的datagrid的哪一列

WPF中DataGrid的ComboBox的简单绑定方式(绝对简单)

当 SelectionMode 设置为 Cell 时,如何突出显示 WPF DataGrid 中的一行

wpf datagrid怎么得到第一项焦点?然后在方向键上下移动

WPF的DataGrid列头和行头相交的单元格怎么修改样式和填充文字