WPF中的层叠样式(一个CSS)

时间:2011-11-03 12:23:44

标签: css wpf styling

有没有办法在WPF中指定类似的内容:

CSS:

#someSpan input { color: #f1f1f1; }
or
span input { color: #f1f1f1; }

意思是,我希望容器中的所有TextBlock元素都遵循x样式,而不必将样式应用于每个文本块。

只是为了澄清,我需要在WPF中做这样的事情。

我知道样式的BasedOn属性..但这不是我在这里寻找的

寻找类似的东西

 <Style x:Key="FileItem"  TargetType="{x:Type #SomeContainer TextBlock}">

或者在SomeContainer中,添加将应用于其所有文本块的TextBlock样式

2 个答案:

答案 0 :(得分:6)

你可以这样做,你只需要嵌套样式,例如

<Style TargetType="{x:Type Border}">
    <Style.Resources>
        <Style TargetType="{x:Type TextBox}">
            <!-- ... -->
        </Style>
    <Style.Resources>
</Style>

这允许您在TextBoxes中设置Borders样式,但是元素只能应用一种样式,因此并行“规则”也不会起作用。

答案 1 :(得分:4)

关于问题的最后一部分,如果要将样式应用于特定元素中的所有TextBlock,只需将Style放在该元素资源中:

<TextBlock /> <!-- unaffected -->

<Grid>
    <Grid.Resources>
        <Style TargetType="TextBlock">
            <!-- ... -->
        </Style>
    </Grid.Resources>

    <TextBlock /> <!-- will be styled -->
</Grid>

如果您将样式存储在单独的ResourceDictionary中,则可以通过合并资源字典将其全部“导入”给特定元素:

<Grid>
    <Grid.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="/Resources/MyOtherStyles.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Grid.Resources>

    <TextBlock /> <!-- will be styled -->
</Grid>