gpt4 book ai didi

c# - 如何在获得焦点后立即将单元格置于编辑模式

转载 作者:行者123 更新时间:2023-11-30 20:48:22 24 4
gpt4 key购买 nike

假设我有一个 DataGrid。假设所有列都是 TemplateColumns。当任何单元格获得焦点时,我希望它进入编辑模式。

到目前为止我尝试了什么:

我为 DataGridCell 创建了一个样式,如下所示:

<Style TargetType="{x:Type DataGridCell}">
<EventSetter Event="GotFocus" Handler="DataGridCell_GotFocus" />
</Style>

在窗口的代码隐藏中:

private void DataGridCell_GotFocus(object sender, RoutedEventArgs e)
{
DataGridCell cell = sender as DataGridCell;
if (cell != null && !cell.IsEditing && !cell.IsReadOnly)
{
cell.IsEditing = true;
}
}

尝试上面的问题:

我必须单击单元格才能使其进入编辑模式。

最佳答案

获得焦点时,单元格进入编辑模式,但文本框没有键盘焦点,因此下一个 Tab 键将被文本框吃掉并获得焦点。

正如您提到的,您必须按两次 Tab 才能将焦点移至下一个单元格。您可以做的是将焦点放在加载事件上的 TextBox 上:

XAML 用于虚拟元素:

<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Name}" Loaded="TextBox_Loaded"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>

代码隐藏:

private void TextBox_Loaded(object sender, RoutedEventArgs e)
{
(sender as TextBox).Focus();
}

当然,您可以将处理程序移动到 dataGrid 中所有文本框的某种基本样式,这样您就不必为所有单元格 Hook 处理程序。


如果您不想拥有处理程序,您也可以使用 interactivity 触发器来做到这一点,如定义的 here :

<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding Name}">
<Interactivity:Interaction.Triggers>
<Interactivity:EventTrigger EventName="Loaded">
<local:TakeFocusAction />
</Interactivity:EventTrigger>
</Interactivity:Interaction.Triggers>
</TextBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

和行为触发 Action :

public class TakeFocusAction : TriggerAction<UIElement>
{
protected override void Invoke(object parameter)
{
AssociatedObject.Focus();
}
}

关于c# - 如何在获得焦点后立即将单元格置于编辑模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24712922/

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