从 (object sender, RoutedEventArgs e) 获取列名

Get column name from (object sender, RoutedEventArgs e)

我想获取单元格的列名称,就像我在松散焦点上处理其内容一样 method.I 可以获取内容,但不能获取列 header。

private void lostFocus(object sender, RoutedEventArgs e)
{
    var jj = sender as DataGridColumnHeader;          
    var box = sender as TextBox;          

    if (box != null && box.Text != "0")
    {
        var ff =  jj.Column.Header.ToString();          
        if (ff == "column1") { amount1 = Int32.Parse(box.Text); }
        if (ff == "column2") { amount2 = Int32.Parse(box.Text); }
        if (ff == "column3") {amount3 = Int32.Parse(box.Text); }
    }
    else
    {

    }
}

xaml代码

<toolkit:DataGridTemplateColumn Header="column1" Width="8*">
  <toolkit:DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <TextBox Padding="0" LostFocus="OnGotFocus" GotFocus="OnGotFocus" />
    </DataTemplate>
  </toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>

Getting column header

Fredrik 已在此处提供您需要的内容。基本上,您需要获取 DataGrid 中存在的所有 children 类型的 DataGridColumnHeader。检查列引用,然后获取 header。

此外,我看到您正在从发件人处获取 DataGridColumnHeader。为了到达 DataGrid object,您可以使用辅助方法:

    public static T FindParent<T>(DependencyObject child) where T : DependencyObject
    {
        //get parent item
        DependencyObject parentObject = VisualTreeHelper.GetParent(child);

        //we've reached the end of the tree
        if (parentObject == null) return null;

        //check if the parent matches the type we're looking for
        T parent = parentObject as T;
        if (parent != null)
            return parent;
        else
            return FindParent<T>(parentObject);
    }

这样使用:

DataGrid parentGrid = FindParent<DataGrid>(sender as DataGridColumnHeader );

或从文本框开始

DataGrid parentGrid = FindParent<DataGrid>(sender as TextBox);

我不太确定你的情况。

已更新 Xamal...将文本框名称设置为与 header 名称相同

<toolkit:DataGridTemplateColumn Header="column1" Width="8*">
  <toolkit:DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
      <TextBox Padding="0" Name="column1" LostFocus="OnGotFocus" />
    </DataTemplate>
  </toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>

然后从我的发件人那里得到了名字....简单有效

private void lostFocus(object sender, RoutedEventArgs e)
{      
    var box = sender as TextBox;          
    if (box != null && box.Text != "0")
    {
        var name = box.Name.ToString();

        if (name == "column1") { amount1 = Int32.Parse(box.Text); }
        if (name == "column2") { amount2 = Int32.Parse(box.Text); }
        if (name == "column3") {amount3 = Int32.Parse(box.Text); }
    }
    else
    {

    }
}

感谢帮助https://whosebug.com/users/2047469/olaru-mircea