DataGridTemplateColumn を動的に作成しています。
var binding = new Binding
{
Path = new PropertyPath("MyProperty"),
UpdateSourceTrigger = UpdateSourceTrigger.LostFocus
};
var converterParameter = new List<object> { header, rows, myGrid };
binding.Converter = new MyConverter();
binding.ConverterParameter = converterParameter;
var textBoxValue = new FrameworkElementFactory(typeof(TextBox));
totalUnitsValue.SetBinding(TextBox.TextProperty, binding);
totalUnitsValue.SetValue(TextBox.HorizontalContentAlignmentProperty, HorizontalAlignment.Right);
totalUnitsValue.SetValue(TextBox.WidthProperty, 40.0);
totalUnitsValue.SetValue(TextBox.MarginProperty, new Thickness(4, 0, 10, 0));
var factoryElement = new FrameworkElementFactory(typeof(StackPanel));
factoryElement.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
factoryElement.AppendChild(textBoxValue );
var column = new DataGridTemplateColumn
{
Header = header,
CellTemplate = new DataTemplate { VisualTree = factoryElement }
};
myGrid.Columns.Add(column);
これは、いくつかの列でうまく機能します。しかし、10 個以上の列 (80 -90) の textBoxes を作成すると、最後に作成された TextBoxes で値を変更したり、TextBox にフォーカスを置いたりすることができなくなります。TextBlockのようになります。
編集:
STACKPANEL を削除しても、テキスト ボックスに問題はありませんが、複数の要素を表示する必要があるため、何らかの種類のコンテナーが必要です。
何ができるかを教えてください