6

ElementStyleDataGrid ComboBox 列を変更しようとしています。おそらく、TextBlockコントロールが編集されていないとき、スタイルは実際にはタイプです。他の例に示されているように、私は試しました:

<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使用してトリックを実行できます。ComboBoxTextBlock

<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上記のスタイルでは、他の場所で定義されたグローバルに定義されたスタイルを使用しTextComboBox. 最後に、次のようにスタイルを使用できます。

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

このEditingElementStyle場合の は、別の場所で定義されたグローバルに定義されComboBoxたスタイルです。

于 2014-11-11T15:30:01.340 に答える
3

ElementStyleこの場合、 のタイプである必要がありComboBoxます。操作する 2 種類の DataGrid があります。1 つDataGridRowDataGridCellは行、2 つ目はセルです。したがって、デフォルトでは、すべてが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 に答える