【问题标题】:Cascading styles in WPF (a la CSS)WPF 中的级联样式(a la CSS)
【发布时间】:2011-11-03 12:23:44
【问题描述】:

有没有办法在 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 样式,该样式将应用于其所有文本块

【问题讨论】:

标签: css wpf styling


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    关于您问题的最后一部分,如果您想将样式应用于特定元素中的所有 TextBlocks,只需将 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>
    

    【讨论】:

    • 好点..虽然我在单独的 .xaml 中定义了所有样式.. 我想我仍然可以将上述定义指向静态资源...
    • 是的,这几乎可以满足我的需要。但是我仍然希望我不必为每个元素创建本地覆盖...
    • 查看我的更新 - 它仍然不完美,但您可以使用合并的资源字典一次导入大量样式
    猜你喜欢
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2020-06-16
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多