首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF ContentControl样式设置

WPF ContentControl样式设置
EN

Stack Overflow用户
提问于 2011-04-20 21:40:46
回答 1查看 6.6K关注 0票数 2

如何将样式应用于contentcontrol的内容。例如:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-20 22:05:22

编辑2:看起来您正在尝试对每个DataGrids应用不同的样式。要做到这一点,您需要在每个ContentControl的资源部分中定义它们的特定样式。如果样式是在其他位置定义的,则始终可以基于在其他位置定义的样式创建新样式,如下所示

第一个ContentControl的DockPanel的背景将是黑色。第二个是蓝色的。

代码语言:javascript
复制
<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-对于你的例子,我认为你想要这样的东西(我不能测试它,因为我不能访问你的'Controls‘命名空间):

代码语言:javascript
复制
<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>

遗憾的是,您不能按照Why can't I style a DataGridTextColumn?中的说明对DataGridTextColumns进行样式设置

相反,我通常将DataGridTextColumn的样式设置为‘CellStyle’:

代码语言:javascript
复制
<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 (我想不出有什么理由不这样做)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5731276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档