1
因此,在我的DataGrid上,我有下面的Style,設置,綁定ReadOnly和Reordering變量,使用MultiDataTrigger觸發,我知道它的工作原理是因爲它灰色並將值設置爲只讀。唯一的問題是,如果用DataGridTemplateColumn創建的ComboBox沒有設置其IsReadOnly值。我怎樣才能得到這個工作?我不知道如何去尋找模板列應該如何綁定。如何使DataGrid MultiDataTrigger影響代碼隱藏添加DataGridTemplateColumn
數據網格樣式(其被包裹在<DataGrid></DataGrid>
標籤)
<DataGrid.Style>
<Style TargetType="{x:Type DataGrid}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ReadOnly}" Value="True"/>
<Condition Binding="{Binding Reordering}" Value="False"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="IsReadOnly" Value="True" />
<Setter Property="Foreground" Value="Gray" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ReadOnly}" Value="True"/>
<Condition Binding="{Binding Reordering}" Value="True"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="IsReadOnly" Value="True" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding ReadOnly}" Value="False"/>
</MultiDataTrigger.Conditions>
<MultiDataTrigger.Setters>
<Setter Property="IsReadOnly" Value="False" />
</MultiDataTrigger.Setters>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Style>
代碼,用於創建AA DataGridTemplateColumn
DataTemplate comboDisplayTemplate = new DataTemplate();
FrameworkElementFactory comboDisplayElement = new FrameworkElementFactory(typeof(ComboBox));
Binding comboDisplayBinding = new Binding(f.ColumnName) { UpdateSourceTrigger = UpdateSourceTrigger.LostFocus };
comboDisplayElement.SetBinding(ComboBox.SelectedValueProperty, comboDisplayBinding);
comboDisplayElement.SetValue(ComboBox.DisplayMemberPathProperty, "Value");
comboDisplayElement.SetValue(ComboBox.SelectedValuePathProperty, "Key");
Binding comboDisplayListBinding = new Binding(f.ColumnName + "List");
comboDisplayElement.SetValue(ComboBox.ItemsSourceProperty, comboDisplayListBinding);
comboDisplayTemplate.VisualTree = comboDisplayElement;
templateColumn.CellTemplate = comboDisplayTemplate;
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn() {
Header = f.ShortDisplay,
};
DataTemplate comboboxTemplate = new DataTemplate();
FrameworkElementFactory comboboxElement = new FrameworkElementFactory(typeof(ComboBox));
Binding comboboxBinding = new Binding(f.ColumnName) { UpdateSourceTrigger = UpdateSourceTrigger.LostFocus };
comboboxElement.SetBinding(ComboBox.SelectedValueProperty, comboboxBinding);
comboboxElement.SetValue(ComboBox.DisplayMemberPathProperty, "Value");
comboboxElement.SetValue(ComboBox.SelectedValuePathProperty, "Key");
Binding comboboxListBinding = new Binding(f.ColumnName + "List");
comboboxElement.SetValue(ComboBox.ItemsSourceProperty, comboboxListBinding);
comboboxTemplate.VisualTree = comboboxElement;
templateColumn.CellEditingTemplate = comboboxTemplate;