6

我正在尝试更改ElementStyleDataGrid ComboBox 列的。假设TextBlock当控件没有被编辑时 Style 是真正的类型。因此,如其他示例所示,我尝试过:

<DataGridComboBoxColumn.ElementStyle>
    <Style TargetType="TextBlock">
        <Setter Property="Background" Value="Green" />
    </Style>
</DataGridComboBoxColumn.ElementStyle>

当这嵌入到我的DataGridComboBoxColumn定义中时,我收到了这个奇怪的错误消息:

“TextBlock”TargetType 与元素“TextBlockComboBox”的类型不匹配。

究竟是什么TextBlockComboBox?或者更重要的是,我怎样才能到达ElementStyle,因为定位ComboBox似乎没有做任何事情。

4

3 回答 3

4

TextBlockComboBox是 的内部类型DataGridComboBoxColumn。我也不知道如何设置该类型的样式,但您可以DataGridComboBoxColumn.ElementStyle使用ComboBox看起来像 a 的样式来欺骗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并绑定Text. ComboBox最后,您可以像这样使用样式:

<DataGridComboBoxColumn ElementStyle="{StaticResource TextBlockComboBoxStyle}"
                        EditingElementStyle="{StaticResource {x:Type ComboBox}}" />

EditingElementStyle这种情况下,又是在别处定义的全局定义ComboBox样式。

于 2014-11-11T15:30:01.340 回答
3

ElementStyle在这种情况下应该是ComboBox. 我们有两种类型的 DataGrid,它可以操作 -DataGridRow并且DataGridCell,第一种是行,第二个是单元格。因此,默认情况下,所有内容都由DataGridCellnot类型的单元组成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}" />
于 2013-08-17T15:38:59.430 回答
0

假设当控件未被编辑时,Style 的类型实际上是 TextBlock。

没有 hackDataGridComboBoxColumn允许对 和 使用相同的ElementStyle样式EditingElementStyle。您必须ComboBox用作目标类型。

于 2021-01-27T18:37:11.663 回答