小编Fre*_*rik的帖子

WPF默认样式和UserControls - 最佳实践?

我有以下情况(简化):

在我的ResourceDictionary中,我为Label定义了几个命名样式:

<Style
    x:Key="sNormalLabel"
    TargetType="Label" >
    <Setter Property="FontFamily" Value="Verdana" />
    <Setter Property="FontSize" Value="12" />
    <!-- ... -->
</Style>
<Style
    x:Key="sHeaderLabel"
    TargetType="Label"
    BasedOn="{StaticResource sNormalLabel}" >
    <Setter Property="FontSize" Value="16" />
</Style>
Run Code Online (Sandbox Code Playgroud)

然后我通过使用BasedOn引用它,使其中一个默认为没有键的样式:

<!-- Apply Normal label automatically -->
<Style 
    TargetType="Label"
    BasedOn="{StaticResource sNormalLabel}" />
Run Code Online (Sandbox Code Playgroud)

我认为自动应用标准样式标签非常方便,我知道如果将来我们的设计团队决定使用Wingdings或其他东西,那么整个应用程序很容易改变(事实上所有应用程序都是如此)共享相同的ResourceDictionary).

创建UserControl我想在顶部添加一个带有sHeaderLabel样式的Label,因此我申请

Style={StaticResource sHeaderLabel}
Run Code Online (Sandbox Code Playgroud)

在USerControl XAML中,设计师看起来都很好.

但是,当我将UserControl添加到MainWindow时,标题标签返回到sNormalLabel样式(自动应用的样式).

我假设它与应用样式的顺序有关,UserControl在创建后由MainWindow设置样式,sHeaderLabel样式被自动样式覆盖.

这给我留下了几个悬而未决的问题:

  1. 像我一样使用自动应用的样式是不常见并且与最佳实践相反?我认为这很实用,但也许这是错误的方法.
  2. 有没有办法明确排除某些控件应用这些自动样式?我能想到的唯一方法是使用HeaderLabel扩展Label并应用不同的资源键,以便HeaderLabel自动应用sHeaderLabel样式.还有其他方法吗?

如果有人对类似的东西有任何实际经验,我会很感激.

编辑:有趣的是,我刚刚意识到我只看到Font*属性的这些问题.在Normal/Header样式中以不同方式设置Foreground/Background画笔会使用CORRECT颜色将UserControl中的Label(使用sHeaderLabel设置样式)保留.但是,在sHeaderLabel中将FontWeight设置为粗体无效.

我也以相同的方式设置TextBox样式,使用HeaderTExtBox样式,我也没有看到问题,只有标签.

干杯!

./Fredrik

.net wpf styles

5
推荐指数
1
解决办法
1144
查看次数

CSS选择器组合语法

我正在使用jqGrid进行项目并检查它使用的样式我找到了这样的选择器:

.ui-jqgrid tr.ui-row-ltr td { 
... 
}
Run Code Online (Sandbox Code Playgroud)

.ui-jqgrid 当然是一堂课.

td.ui-row-ltrui-row-ltr应用于表行元素的类的选择器.

所以我的问题:

  1. 它们被空间隔开是什么意思?我知道逗号分离.class1, .class2意味着"应用于class1和class2",但空间分离是什么意思?
  2. 什么是td在到底意味着什么?td.class我理解但是class td

css css-selectors

0
推荐指数
1
解决办法
158
查看次数

标签 统计

.net ×1

css ×1

css-selectors ×1

styles ×1

wpf ×1