c# - datagrid-cell 获得焦点时自动编辑 WPF datagrid 内容

标签 c# wpf xaml datagrid

我在 WPF 中有一个带有 DataGridTextColumDataGridTemplateColum 的数据网格。

<DataGridTextColumn Width="4*" IsReadOnly="True" x:Name="dataGridColumnDescription" 
Header="Description" Binding="{Binding Description}">
</DataGridTextColumn>

<DataGridTemplateColumn CellStyle="{StaticResource CellEditing}" IsReadOnly="False" Width="*" Header="Value" 
CellEditingTemplateSelector="{StaticResource myCellEditingTemplateSelectorValue}" 
CellTemplateSelector="{StaticResource myCellTemplateSelectorValue}">
</DataGridTemplateColumn>

CellTemplateSelectors 为 Celltemplate 返回一个带有 TextBlock 的 DataTemplate。用于 CellEditing 的文本框!

<DataTemplate x:Key="dGridStringValueTemplate">
    <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="{Binding Path=Value}"/>
</DataTemplate>

<DataTemplate x:Key="dGridStringValueTemplateEditing">
    <TextBox TextAlignment="Center" VerticalAlignment="Center" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" BorderThickness="1" Text="{Binding Path=Value, UpdateSourceTrigger=LostFocus}"/>
</DataTemplate>

现在我想在 DataGridCell 获得焦点时自动聚焦 TextBox。用户无需双击单元格即可编辑文本框内容。

我找到了这篇文章:

DataGrid Tips & Tricks: Single-Click Editing 我可以在哪里获取当前 DataGridCell,但我如何访问内容以使文本框获得编辑内容的焦点?

这是我的风格:

<Style x:Key="CellEditing" TargetType="{x:Type DataGridCell}">
    <EventSetter Event="PreviewMouseLeftButtonDown" Handler="myDataGridMain_PreviewMouseLeftButtonDown"></EventSetter>
</Style>

这是我的事件处理器:

private void myDataGridMain_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    DataGridCell cell = sender as DataGridCell;     // cell ist not null

    DataGridTemplateColumn col = cell.Column as DataGridTemplateColumn; //col is not null

    DataTemplate template = col.CellTemplate;  //this is null
}

如何获取带有该事件处理程序的文本框?

最佳答案

这似乎有效:

    <DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTemplateColumn>
                <DataGridTemplateColumn.CellEditingTemplate>
                    <DataTemplate>
                        <TextBox  FocusManager.FocusedElement="{Binding RelativeSource={RelativeSource Self}}"></TextBox>
                    </DataTemplate>
                </DataGridTemplateColumn.CellEditingTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

关于c# - datagrid-cell 获得焦点时自动编辑 WPF datagrid 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28168645/

相关文章:

c# - 在 Caliburn.Micro 中如何将操作绑定(bind)到嵌套的 ViewModel 方法?

c# - 在 XAML 中,我想使用 StringFormat 来显示数值而不进行任何舍入。是否可以?

wpf - 当其他列的内容折叠时,网格列不填充剩余空间

c# - 如何处理 ASP.NET MVC 3 中的复杂查询?

c# - 在 dll 而不是主应用程序中查找资源

c# - Documentum DFS,重命名 dm_user(user_name 属性)

慢打字机的 WPF ComboBox

.net - 是否有WPF控件可让您连接到SQLSERVER数据库?

c# - 为什么我的 Visual Studio 2015 SQL Server 无法与 Azure SQL 数据库连接?

c# - 术语 'Add-AzureAccount' 未被识别为 cmdlet、函数、脚本文件的名称