Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WPF中DataGridComboBoxColumn的ElementStyle错误_Wpf_Xaml_Datagrid_Styles_Datagridcomboboxcolumn - Fatal编程技术网

WPF中DataGridComboBoxColumn的ElementStyle错误

WPF中DataGridComboBoxColumn的ElementStyle错误,wpf,xaml,datagrid,styles,datagridcomboboxcolumn,Wpf,Xaml,Datagrid,Styles,Datagridcomboboxcolumn,我正在尝试更改DataGrid ComboBox列的ElementStyle。假设控件未被编辑时,样式实际上是TextBlock类型。如其他示例所示,我尝试了: <DataGridComboBoxColumn.ElementStyle> <Style TargetType="TextBlock"> <Setter Property="Background" Value="Green" /> </Style> <

我正在尝试更改DataGrid ComboBox列的
ElementStyle
。假设控件未被编辑时,样式实际上是
TextBlock
类型。如其他示例所示,我尝试了:

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

当这被嵌入到我的
datagridcomboxcolumn
定义中时,我会收到一条奇怪的错误消息:

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


什么是
TextBlockComboBox
?或者更重要的是,我如何进入
ElementStyle
,因为定位
ComboBox
似乎没有任何作用。

ElementStyle
在这种情况下应该是
ComboBox
的类型。我们有两种数据网格,它运行-
DataGridRow
DataGridCell
,第一种是行,第二种是单元格。因此,默认情况下,所有内容都由
DataGridCell
类型的单元格组成,而不是
TextBlock的

要确定另一列的类型,请使用
DataGridTemplateColumn
。因此,
DataGridComboxColumn
可能被定义为:

<DataGridTemplateColumn Width="1.5*" IsReadOnly="False" Header="Position2">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <ComboBox x:Name="ComboBoxColumn" />
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
然后像这样使用:

<DataGridComboBoxColumn x:Name="ComboBoxColumn" 
                        CellStyle="{StaticResource StyleForCell}"
                        Header="Position"
                        SelectedItemBinding="{Binding Position}" />

TextBlockComboBox
DataGridComboBoxColumn
的内部类型。我也不知道如何设置该类型的样式,但您可以通过使用看起来像
文本块的
组合框
样式来欺骗
DataGridComboxColumn.ElementStyle

<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>
在本例中,
EditingElementStyle
也是在别处定义的全局定义的
组合框
样式

假设控件未被编辑时,样式实际上是TextBlock类型


不,
datagridcomboxcolumn
中存在允许对
ElementStyle
EditingElementStyle
使用相同样式的漏洞。您必须使用
ComboBox
作为目标类型。

使用
TemplateColumn
有效,因此我将此标记为答案。我仍然不明白我的代码失败的确切原因,因为它来自另一个web解决方案。但我只需要一个解决方案:)
<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>
<DataGridComboBoxColumn ElementStyle="{StaticResource TextBlockComboBoxStyle}"
                        EditingElementStyle="{StaticResource {x:Type ComboBox}}" />