我想创建类似可重用控件的东西。
我已将名为MyDataGrid.xaml的页面添加到我的Project(WPFApplication2)的根目录中。我已将根元素从Page更改为DataGrid并向其添加了一列。您可以在下面的xaml中看到更改:
<DataGrid x:Class="WpfApplication2.MyDataGrid"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Delete">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="X" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
在MyDataGrid.xaml.cs中,我将基类更改为DataGrid。你可以在下面看到:
public partial class MyDataGrid : DataGrid
{
public MyDataGrid()
{
InitializeComponent();
}
}
现在默认提供MainWindow.xaml。我将这个可重用的控件添加到MainWindow.xaml并添加了一些列,如下所示:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Self="clr-namespace:WpfApplication2"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Self:MyDataGrid>
<Self:MyDataGrid.Columns>
<DataGridTextColumn Header="Name" />
<DataGridTextColumn Header="Age" />
<DataGridTextColumn Header="Class" />
<DataGridTextColumn Header="School" />
</Self:MyDataGrid.Columns>
</Self:MyDataGrid>
</Grid>
</Window>
我的问题:
当我运行程序时,列的顺序如下:
删除姓名年龄班学校
在上面提到的列中,Default Column由Default提供,其他列在MainWindow.xmal
中声明现在,我想更改列的顺序,以便默认列显示在DataGrid的末尾,如下所示:
姓名年龄班学校删除
答案 0 :(得分:1)
首先,这不是您创建可重用控件的方式。您应该定义一个仅继承到DataGrid
并对您的自定义控件使用Styles
的类。
您构建Reusable control
的方式始终会将First Column
插入删除。
为了解决你所做的事情,我将Delete column
定义为资源。
<DataGrid x:Class="WindowsApplication1.Blah"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<DataGrid.Resources>
<DataGridTemplateColumn Header="Delete" x:Key="DeleteColumn">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="X" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="Name" />
<DataGridTextColumn Header="Age" />
<DataGridTextColumn Header="Class" />
<DataGridTextColumn Header="School" />
</DataGrid.Columns>
</DataGrid>
然后在我的.cs
文件中,我看起来像这样
public partial class Blah : DataGrid
{
public Blah()
{
InitializeComponent();
this.Loaded += OnLoaded;
}
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
var templateColumn = this.Resources["DeleteColumn"] as DataGridTemplateColumn;
this.Columns.Add(templateColumn);
}
}
现在,我们总是在最后添加Delete column
。