2

コンテンツコントロールのコンテンツにスタイルを適用するにはどうすればよいですか。例えば:

<Window.Resources>
    <Controls:DataGrid x:Key="PersonDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding .}" x:Shared="False">
        <Controls:DataGrid.Columns>
            <Controls:DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}" IsReadOnly="True"/>
            <Controls:DataGridTextColumn Header="Last Name" Binding="{Binding Path=LastName}" IsReadOnly="True"/>
        </Controls:DataGrid.Columns>
    </Controls:DataGrid>
</Window.Resources>

<StackPanel>
    <ContentControl Content="{StaticResource PersonDataGrid}" DataContext="{Binding Path=Customers}" Style="DataGridStyle1"></ContentControl>
    <ContentControl Content="{StaticResource PersonDataGrid}" DataContext="{Binding Path=Employees}" Style="DataGridStyle2"></ContentControl>
</StackPanel>
4

1 に答える 1

4

編集2:各DataGridに異なるスタイルを適用しようとしているようです。これを行うには、各ContentControlのリソースセクション内で特定のスタイルを定義する必要があります。スタイルが他の場所で定義されている場合は、以下に示すように、他の場所で定義されているスタイルに基づいて、いつでも新しいスタイルを作成できます。

最初のContentControlのDockPanelの背景は黒になります。2番目は青になります。

<Window.Resources>
    <Style TargetType="DockPanel" x:Key="DockStyle1">
        <Setter Property="Background" Value="Black" />
    </Style>
    <Style TargetType="DockPanel" x:Key="DockStyle2">
        <Setter Property="Background" Value="Blue" />
    </Style>
    <DockPanel x:Key="MyDockPanel">
        <Rectangle Fill="Green" DockPanel.Dock="Top" Height="20" Width="50" />
        <Rectangle Fill="Red" DockPanel.Dock="Top" Height="20" Width="20" />
        <Rectangle Fill="Yellow" DockPanel.Dock="Bottom" Height="20" Width="50" />
    </DockPanel>
</Window.Resources>
<StackPanel>
    <StackPanel>
        <ContentControl Content="{StaticResource MyDockPanel}">
            <ContentControl.Resources>
                <Style TargetType="{x:Type DockPanel}" BasedOn="{StaticResource DockStyle1}" />
            </ContentControl.Resources>
        </ContentControl>
        <ContentControl Content="{StaticResource MyDockPanel}">
            <ContentControl.Resources>
                <Style TargetType="DockPanel" BasedOn="{StaticResource DockStyle2}" />
            </ContentControl.Resources>
        </ContentControl>
    </StackPanel>
</StackPanel>

編集3-あなたの例では、次のようなものが必要だと思います(ただし、「コントロール」名前空間にアクセスできないため、これをテストすることはできません)。

<Window.Resources>
    <Controls:DataGrid x:Key="PersonDataGrid" AutoGenerateColumns="False" ItemsSource="{Binding .}" x:Shared="False">
        <Controls:DataGrid.Columns>
            <Controls:DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}" IsReadOnly="True"/>
            <Controls:DataGridTextColumn Header="Last Name" Binding="{Binding Path=LastName}" IsReadOnly="True"/>
        </Controls:DataGrid.Columns>
    </Controls:DataGrid>
</Window.Resources>

<StackPanel>
    <ContentControl Content="{StaticResource PersonDataGrid}" DataContext="{Binding Path=Customers}">
        <ContentControl.Resources>
            <Style TargetType="{x:Type Controls:DataGrid}" BasedOn="{StaticResource DataGridStyle1}" />
        </ContentControl.Resources>
    </ContentControl>
    <ContentControl Content="{StaticResource PersonDataGrid}" DataContext="{Binding Path=Employees}">
        <ContentControl.Resources>
            <Style TargetType="{x:Type Controls:DataGrid}" BasedOn="{StaticResource DataGridStyle2}" />
        </ContentControl.Resources>
    </ContentControl>
</StackPanel>

残念ながら、「DataGridTextColumnのスタイルを設定できないのはなぜですか? 」で説明されているように、DataGridTextColumnsのスタイルを設定することはできません。

代わりに、私は通常、DataGridTextColumnのCellStyleを'style'に設定します。

<Style TargetType="DataGridCell" x:Key="DataGridCenteredText">
    <Setter Property="TextBlock.TextAlignment" Value="Center" />
</Style>

<DataGridTextColumn Header="Centered Text" CellStyle="{StaticResource DataGridCenteredText}" Binding="{Binding Path=MyData}" />

ただし、列ごとにCellStyleを定義する必要があると思います(とにかく定義しない理由は考えられません)。

于 2011-04-20T14:05:22.490 に答える