我正在尝试修改ElementStyle的DataGrid ComboBox列。据推测,当控件未被编辑时,样式实际上是TextBlock类型的。因此,正如在其他例子中所示,我尝试过:
<DataGridComboBoxColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="Background" Value="Green" />
</Style>
</DataGridComboBoxColumn.ElementStyle>当它嵌入到我的DataGridComboBoxColumn定义中时,我会得到一条奇怪的错误消息:
'TextBlock‘TargetType与'TextBlockComboBox’元素类型不匹配。
TextBlockComboBox到底是什么?或者更重要的是,我如何才能到达ElementStyle,因为目标ComboBox似乎什么都不做。
发布于 2013-08-17 15:38:59
在这种情况下,ElementStyle应该是ComboBox的类型。我们有两种类型的DataGrid,它们是DataGridRow和DataGridCell,第一种是线,第二种是单元。因此,默认情况下,所有内容都由类型为DataGridCell而不是TextBlock's的单元格组成。
若要确定另一列的类型,请使用DataGridTemplateColumn。因此,DataGridComboBoxColumn可能被定义为:
<DataGridTemplateColumn Width="1.5*" IsReadOnly="False" Header="Position2">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox x:Name="ComboBoxColumn" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>使用此集合可以是任何类型的控件。
在您的例子中,您需要为DataGridCell创建一个样式
<Style x:Key="StyleForCell" TargetType="{x:Type DataGridCell}">
<Setter Property="Background" Value="Green" />
</Style>像这样使用:
<DataGridComboBoxColumn x:Name="ComboBoxColumn"
CellStyle="{StaticResource StyleForCell}"
Header="Position"
SelectedItemBinding="{Binding Position}" />发布于 2014-11-11 15:30:01
TextBlockComboBox是DataGridComboBoxColumn的内部类型。我也不知道如何使该类型具有样式,但您可以通过使用看起来像DataGridComboBoxColumn.ElementStyle的ComboBox样式来欺骗TextBlock
<Style x:Key="TextBlockComboBoxStyle"
TargetType="{x:Type ComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBox}">
<TextBlock Text="{TemplateBinding Text}"
Style="{StaticResource {x:Type TextBlock}}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>在上面的样式中,我使用在其他地方定义的全局定义的TextBlock样式,并绑定ComboBox的Text属性。最后,您可以使用这样的样式:
<DataGridComboBoxColumn ElementStyle="{StaticResource TextBlockComboBoxStyle}"
EditingElementStyle="{StaticResource {x:Type ComboBox}}" />本例中的EditingElementStyle也是在其他地方定义的全局定义的ComboBox样式。
发布于 2021-01-27 18:37:11
据推测,当控件未被编辑时,样式实际上是TextBlock类型的。
不,DataGridComboBoxColumn中存在允许ElementStyle和EditingElementStyle使用相同样式的黑客。您必须使用ComboBox作为目标类型。
https://stackoverflow.com/questions/18281455
复制相似问题