Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF DataGrid,模板列中的日期选择器,在文本框上设置焦点_Wpf_Datagrid_Datepicker_Datatemplate - Fatal编程技术网

WPF DataGrid,模板列中的日期选择器,在文本框上设置焦点

WPF DataGrid,模板列中的日期选择器,在文本框上设置焦点,wpf,datagrid,datepicker,datatemplate,Wpf,Datagrid,Datepicker,Datatemplate,给定一个datagrid,它在编辑模板中包含一个带有日期选择器的列,我想知道当单元格获得焦点时,是否可以或如何将焦点设置到控件的文本框部分。运行下面的代码时,请注意,单击日期列需要多次单击才能进入文本框…第一次单击将焦点设置为行,第二次单击将日期列设置为编辑模式,但我必须再次单击才能将焦点设置为文本框。我想单击一次,或者至少在单元格被单击进入编辑模式时,让文本框部分中的光标准备好输入数据 <Window x:Class="WpfApplication1.MainWindow" xm

给定一个datagrid,它在编辑模板中包含一个带有日期选择器的列,我想知道当单元格获得焦点时,是否可以或如何将焦点设置到控件的文本框部分。运行下面的代码时,请注意,单击日期列需要多次单击才能进入文本框…第一次单击将焦点设置为行,第二次单击将日期列设置为编辑模式,但我必须再次单击才能将焦点设置为文本框。我想单击一次,或者至少在单元格被单击进入编辑模式时,让文本框部分中的光标准备好输入数据

<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发布的答案就是为我解决问题的具体方法。