私の目標は、WPF データグリッド列にインプレース エディターを作成して、大きなテキストを編集することです。
私のデータソースは、さまざまなテーブルやフィールドからのデータを含めることができる DataTable です。そのため、バインドする定義済みの型がありません。私の例では、「Test」という名前の列が 1 つあります。ここで、列を定義する XAML コードをいくつか書きました。
<ControlTemplate x:Key="ExtendedTemplate">
<StackPanel>
<TextBox Text="{Binding Test}" Width="200" Height="100" AcceptsReturn="True" TextWrapping="Wrap"/>
</StackPanel>
</ControlTemplate>
<DataGrid x:Name="grid" ItemsSource="{Binding}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="TEST Column" Width="200">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox IsDropDownOpen="True">
<ComboBoxItem Template="{StaticResource ExtendedTemplate}"/>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Test}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
ここに私のテストデータソースがあります:
Source = new DataTable("Test");
Source.Columns.Add("Test");
Source.Rows.Add("Item 1 - large amount of text ...");
Source.Rows.Add("Item 2");
Source.Rows.Add("Item 3");
grid.DataContext = Source;
これは問題なく動作しますが、最後に行う必要があるのは、グリッド セルが編集モードで拡張コンボにテキストを入力しているときにグリッド セルを装飾することです。
重要: まず、コンボボックスはどの ItemsSource にもバインドされていませんが、単一の ComboBoxItem が任意のセルに存在し、そのセルのテキストが含まれています。
2 番目 - ComboBox.SelectionBoxItemTemplate プロパティが読み取り専用であるため、DataTemplate を SelectedItem に定義できません。
SelectionBoxItem の datatemplate をこのようなものに置き換える方法を知っている人はいますか?
<DataTemplate>
<TextBlock Text="{Binding Test}"/>
</DataTemplate>
コマンド「テンプレートの編集-コピーの編集...」でコンボボックスのカスタムスタイルを作成しようとしました。多くのマークアップがあり、ここに投稿したくありません。ここに私が編集した小さな部分があります。
<ContentPresenter ContentTemplate="{StaticResource SimplestTemplate}"
ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
Content="{TemplateBinding SelectionBoxItem}"
ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}"
IsHitTestVisible="false"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"/>
データを「テスト」フィールドにバインドする必要がある「SimplestTemplate」の記述方法がわからないため、機能しません。