WPF имеет два разных, но схожих понятия: x: Name, которое используется для создания поля, которое ссылается на элемент, определенный в XAML, т. Е. Соединяет ваш программный код с вашим XAML, и FrameworkElement.Name, который уникально называетэлемент в области имен.
Если элемент имеет свойство FrameworkElement.Name, x: Name установит для этого свойства значение, указанное в XAML.Однако в некоторых случаях полезно связать элементы, не относящиеся к FrameworkElement, к полям в выделенном фрагменте кода, как, например, в вашем примере.
См. Этот связанный вопрос:
В чем разница между атрибутами x: Name и Name в WPF?
В качестве альтернативы выможет определить ваше собственное присоединенное свойство, которое можно использовать для именования столбцов.Присоединенное свойство определяется следующим образом:
public class DataGridUtil
{
public static string GetName(DependencyObject obj)
{
return (string)obj.GetValue(NameProperty);
}
public static void SetName(DependencyObject obj, string value)
{
obj.SetValue(NameProperty, value);
}
public static readonly DependencyProperty NameProperty =
DependencyProperty.RegisterAttached("Name", typeof(string), typeof(DataGridUtil), new UIPropertyMetadata(""));
}
Затем вы можете присвоить имя каждому столбцу ...
xmlns:util="clr-namespace:WPFDataGridExamples"
<t:DataGrid x:Name="dgEmployees" ItemsSource="{Binding Employees}"
AutoGenerateColumns="false" Height="300" >
<t:DataGrid.Columns>
<t:DataGridTextColumn util:DataGridUtil.Name="FirstName" Header="FirstName"
Binding="{Binding FirstName}" />
<t:DataGridTemplateColumn util:DataGridUtil.Name="LastName" Header="LastName" >
<t:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding LastName}" />
</DataTemplate>
</t:DataGridTemplateColumn.CellTemplate>
</t:DataGridTemplateColumn>
</t:DataGrid.Columns>
</t:DataGrid>
Затем получить доступ к этому имени в коде следующим образом:
DataGrid dg = this.dgEmployees;
foreach (var column in dg.Columns)
{
System.Console.WriteLine("name: " + DataGridUtil.GetName(column));
}
Надеюсь, это поможет