我尝试根据DataGridTemplateColumn
进行自定义控制,以便在简单的datagrid
中使用它。
我的XAML代码看起来:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dgNuCol="clr-namespace:Columns.DataGridNumberColumn"
xmlns:nb="clr-namespace:NumberBox" >
<Style TargetType="{x:Type dgNuCol:DataGridNumberColumn}">
<Setter Property="CellEditingTemplate">
<Setter.Value>
<ControlTemplate TargetType="{x:Type dgNuCol:DataGridNumberColumn}">
<nb:NumberBox Text="123"/>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="CellTemplate">
<Setter.Value>
<ControlTemplate TargetType="{x:Type dgNuCol:DataGridNumberColumn}">
<StackPanel>
<TextBlock Text="123" HorizontalAlignment="Center" />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
我的cs代码:
namespace Columns.DataGridNumberColumn
{
public partial class DataGridNumberColumn : DataGridTemplateColumn
{
}
}
我尝试在datagrid
:
<dgNuCol:DataGridNumberColumn Header="Values" CanUserReorder="False"/>
什么都没发生。我的datagrid
没有任何变化,只是空单元格。我做错了什么?
更新:
我尝试以编程方式制作它:
public partial class DataGridNumberColumn : DataGridTemplateColumn
{
public DataGridNumberColumn()
{
FrameworkElementFactory textFactory = new FrameworkElementFactory(typeof(TextBox));
textFactory.SetValue(TextBox.TextProperty, "123");
DataTemplate textTemplate = new DataTemplate();
textTemplate.VisualTree = textFactory;
this.CellTemplate = textTemplate;
}
}
但是,再次,datagrid
没有任何变化。
UPDATE2:
<DataGrid>
<DataGrid.Columns>
<dgNuCol:DataGridNumberColumn Header="Values" CanUserReorder="False"/>
</DataGrid.Columns>
</DataGrid>