我创建了一个矩阵控件,该控件派生自const base64string = 'data:image/png;base64,{bytes...}'.split(',')[1];
Tesseract.recognize(Buffer.from(base64string, 'base64'));
,该控件应该能够在单元格中显示复杂类型。这些复杂的类型应通过模板设置样式。
使用DataGrid
时,AutoGenerateColumns
将根据分配给DataGrid
的列表类型自动创建列和单元格类型。
我想替换网格的行,列和单元格类型,以使用与其绑定的视图模型执行自定义操作和绑定。我已经能够创建自定义的行和列。有没有办法从ItemsSource
派生数据并使数据网格使用该类型而不是默认类型?
我看了一下.net源代码,发现该行使用DataGridCell
创建了单元格,但是该属性不可访问。
DataGridCellsPresenter
更新:尝试替换public class MatrixControl : DataGrid
{
public static readonly DependencyProperty COLUMN_HEADER_TEMPLATE_PROPERTY = DependencyProperty.Register(nameof(ColumnHeaderTemplate), typeof(DataTemplate), typeof(MatrixControl), new PropertyMetadata(default(object)));
public DataTemplate ColumnHeaderTemplate { get { return (DataTemplate)GetValue(COLUMN_HEADER_TEMPLATE_PROPERTY); } set { SetValue(COLUMN_HEADER_TEMPLATE_PROPERTY, value); } }
private MatrixViewModel ViewModel { get { return DataContext as MatrixViewModel; } }
public MatrixControl()
{
DataContextChanged += OnDataContextChanged;
SelectionMode = DataGridSelectionMode.Extended;
SelectionUnit = DataGridSelectionUnit.CellOrRowHeader;
AutoGenerateColumns = true;
}
private void OnDataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
ItemsSource = ViewModel.Rows.Select(c => new Row(c, ViewModel));
}
protected override void OnAutoGeneratingColumn(DataGridAutoGeneratingColumnEventArgs e)
{
e.Cancel = true;
Columns.Clear();
foreach (var column in ViewModel.Columns)
{
Columns.Add(new MatrixColumn(column)
{
HeaderTemplate = ColumnHeaderTemplate
});
}
}
}
class MatrixColumn : DataGridTemplateColumn
{
public object Value { get; }
public MatrixColumn(object value)
{
Value = value;
}
}
class Row
{
public object Value { get; }
public Row(object value)
{
Value = value;
}
}
class MatrixViewModel
{
public IEnumerable<object> Columns { get; set; }
public IEnumerable<object> Rows { get; set; }
}
DataGridCellsPresenter
答案 0 :(得分:0)