プログラムで DataGrid を作成していますが、正常に動作していますが、RowHeaders が正しく表示されません。ツールチップには正しいコンテンツが表示されますが、ヘッダーに空白が表示されているため、テキストは明らかにそこにあります。どうやらスクリーンショットを投稿できません.10行ほどのグリッドが表示され、ヘッダーは幅150ですが、何も表示されず、データの列がいくつか表示されます。
DataGrid を作成するコードは次のとおりです。
seisTraceHeaderGrid = new DataGrid
{
AutoGenerateColumns = false,
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Stretch,
HorizontalScrollBarVisibility = ScrollBarVisibility.Visible,
VerticalScrollBarVisibility = ScrollBarVisibility.Visible,
HorizontalContentAlignment = HorizontalAlignment.Stretch,
HeadersVisibility = DataGridHeadersVisibility.All,
IsReadOnly = true,
CanUserAddRows = false,
CanUserDeleteRows = false,
CanUserReorderColumns = false,
CanUserResizeColumns = true,
CanUserResizeRows = true,
CanUserSortColumns = false,
SelectionMode = DataGridSelectionMode.Single,
SelectionUnit = DataGridSelectionUnit.Cell,
RowHeight = 25,
ColumnWidth = 75,
};
seisTraceHeaderGrid.AlternatingRowBackground = (Brush)Resources["AlternateRowBackgroundBrush"];
seisTraceHeaderGrid.ColumnHeaderStyle = (Style)Resources["ColumnHeaderStyle"];
seisTraceHeaderGrid.LoadingRow += dg_LoadingRow;
// set up the row headers
DataTemplate rowHeaderTemplate = new DataTemplate();
rowHeaderTemplate.DataType = typeof(RowHeaderNode);
FrameworkElementFactory textHolder = new FrameworkElementFactory(typeof(Label));
textHolder.SetBinding(ContentProperty,
new Binding("RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Header"));
rowHeaderTemplate.VisualTree = textHolder;
seisTraceHeaderGrid.RowHeaderTemplate = rowHeaderTemplate;
// add a column for each trace
for (int traceId = 0; traceId < ViewModel.Nodes[0].Count; traceId++) {
seisTraceHeaderGrid.Columns.Add(
new DataGridTextColumn
{
Header = string.Format(" {0}", traceId + 1),
Binding = new Binding(string.Format("[{0}]", traceId))
}
);
}
// add some dummy columns to make it prettier
for (int traceId = ViewModel.Nodes[0].Count; traceId < 5; traceId++) {
seisTraceHeaderGrid.Columns.Add(
new DataGridTextColumn
{
Header = string.Format(" {0}", ""),
Binding = new Binding(string.Format("[{0}]", ""))
}
);
}
seisTraceHeaderGrid.RowHeaderWidth = 150;
seisTraceHeaderGrid.ItemsSource = ViewModel.Nodes;
baseGrid.Children.Add(seisTraceHeaderGrid);
そして、RowHeader ラベルにテキストを配置する方法:
private void dg_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = string.Format("[{0:000}]", ViewModel.RowHeaders[e.Row.GetIndex()].Offset) + " : " + ViewModel.RowHeaders[e.Row.GetIndex()].Name;
}
私がしていないことは何ですか?ティア!
ジャネン