C# 如何使DataGrid MultiDataTrigger影响添加的DataGridTemplateColumn后面的代码
因此,在我的DataGrid上,我有下面的样式,设置,绑定只读变量,并使用MultiDataTrigger重新排序要触发的变量,我知道它是有效的,因为它会变灰并将值设置为只读。唯一的问题是,如果使用DataGridTemplateColumn创建的ComboBox没有设置IsReadOnly值。我怎样才能让它工作?我不知道如何找到模板列应该如何绑定 DataGrid样式(包装在C# 如何使DataGrid MultiDataTrigger影响添加的DataGridTemplateColumn后面的代码,c#,wpf,binding,styles,datagridtemplatecolumn,C#,Wpf,Binding,Styles,Datagridtemplatecolumn,因此,在我的DataGrid上,我有下面的样式,设置,绑定只读变量,并使用MultiDataTrigger重新排序要触发的变量,我知道它是有效的,因为它会变灰并将值设置为只读。唯一的问题是,如果使用DataGridTemplateColumn创建的ComboBox没有设置IsReadOnly值。我怎样才能让它工作?我不知道如何找到模板列应该如何绑定 DataGrid样式(包装在标记中) IsReadOnly属性用于控件,允许/不允许用户更改控件的基础文本,但是默认情况下,组合框没有要更改的基础文
标记中)
IsReadOnly
属性用于控件,允许/不允许用户更改控件的基础文本,但是默认情况下,组合框没有要更改的基础文本。我必须使用UIElement的ishitestvisible
属性,from->获取或设置一个值,该值声明该元素是否可能作为命中测试结果从其呈现内容的某些部分返回
控件使用
IsReadOnly
属性来允许/禁止用户更改控件的基础文本,但是默认情况下组合框没有要更改的基础文本。我必须使用UIElement的ishitestvisible
属性,from->获取或设置一个值,该值声明该元素是否可能作为命中测试结果从其呈现内容的某些部分返回
<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>
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;
<Setter Property="IsHitTestVisible" Value="False" />