WPF DataGrid,模板列中的日期选择器,在文本框上设置焦点
给定一个datagrid,它在编辑模板中包含一个带有日期选择器的列,我想知道当单元格获得焦点时,是否可以或如何将焦点设置到控件的文本框部分。运行下面的代码时,请注意,单击日期列需要多次单击才能进入文本框…第一次单击将焦点设置为行,第二次单击将日期列设置为编辑模式,但我必须再次单击才能将焦点设置为文本框。我想单击一次,或者至少在单元格被单击进入编辑模式时,让文本框部分中的光标准备好输入数据WPF DataGrid,模板列中的日期选择器,在文本框上设置焦点,wpf,datagrid,datepicker,datatemplate,Wpf,Datagrid,Datepicker,Datatemplate,给定一个datagrid,它在编辑模板中包含一个带有日期选择器的列,我想知道当单元格获得焦点时,是否可以或如何将焦点设置到控件的文本框部分。运行下面的代码时,请注意,单击日期列需要多次单击才能进入文本框…第一次单击将焦点设置为行,第二次单击将日期列设置为编辑模式,但我必须再次单击才能将焦点设置为文本框。我想单击一次,或者至少在单元格被单击进入编辑模式时,让文本框部分中的光标准备好输入数据 <Window x:Class="WpfApplication1.MainWindow" xm
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" WindowStartupLocation="CenterScreen">
<Grid>
<DataGrid x:Name="MockGrid" AutoGenerateColumns="False" CanUserAddRows="False" ItemsSource="{Binding MockData}">
<DataGrid.Columns>
<DataGridTextColumn Header="RowId" Binding="{Binding RowId}" />
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding RowDate, StringFormat={}{0:d}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding RowDate}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
以及相应的隐藏代码:
using System;
using System.Collections.ObjectModel;
using System.Windows;
namespace WpfApplication1
{
public class MockData
{
public int RowId { get; set; }
public DateTime RowDate { get; set; }
}
public partial class MainWindow : Window
{
public ObservableCollection<MockData> MockData { get; set; }
public MainWindow()
{
InitializeComponent();
Loaded += (o, e) =>
{
MockGrid.DataContext = this;
MockData = new ObservableCollection<WpfApplication1.MockData>
{
new MockData { RowId = 1, RowDate = new DateTime(2015, 1, 1) },
new MockData { RowId = 2, RowDate = new DateTime(2015, 1, 2) }
};
};
}
}
使用系统;
使用System.Collections.ObjectModel;
使用System.Windows;
命名空间WpfApplication1
{
公共类模拟数据
{
public int RowId{get;set;}
公共日期时间行日期{get;set;}
}
公共部分类主窗口:窗口
{
公共ObservableCollection MockData{get;set;}
公共主窗口()
{
初始化组件();
加载+=(o,e)=>
{
MockGrid.DataContext=this;
MockData=新的ObservableCollection
{
新的MockData{RowId=1,RowDate=newdatetime(2015,1,1)},
新的MockData{RowId=2,RowDate=newdatetime(2015,1,2)}
};
};
}
}
检查此项。谢谢Ganesh,这正是我所需要的。如果其他人也在寻找相同的解决方案,用户2134678发布的答案就是为我解决问题的具体方法。