4

在 Expression Blend 中,您可以创建一个例如 18 的字体大小,然后创建一个“字体大小资源”。

从 HTML/CSS 开始,我想不出什么时候我想为“字体大小”制作一种样式,为“字体样式”制作一种样式,为“字体粗细”制作一种样式。相反,我想制作一个名为“CompanyHeader”的字体,并在其中设置 10 个不同的属性,例如字体粗细、字体样式、字体大小、颜色等。

为什么这在 Expression Blend、XAML 中有所不同,为每个属性制作样式/资源是什么意思?

此图显示了如何单击每个属性上的小按钮将其更改为资源: alt text http://tanguay.info/web/external/blendStyles.png

4

5 回答 5

10

我没有使用 Blend 的经验,但是 XAML 中的样式可以包含多个属性,不仅如此,因为与 css 不同,您只能将一种样式应用于无法组合多个单一属性样式的元素。

这是设置多个属性的样式的示例:

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
   <Page.Resources>
      <Style x:Key="MyStyle" TargetType="{x:Type Label}">
         <Setter Property="Width" Value="125"/>
         <Setter Property="Height" Value="25"/>
         <Setter Property="Background" Value="Red"/>
      </Style>
   </Page.Resources>
   <Label Style="{StaticResource MyStyle}"/>
</Page>

请注意,如果我想将样式分成 3 个较小的样式,每个样式都设置一个属性,我无法使用它们,因为 Label 的 Style 属性只能接受一种样式。

于 2009-02-08T11:58:15.820 回答
4

我认为它们可能允许为 FontFamily、FontWeight 等创建单一资源,以允许它们在应用程序中的多种样式中使用。通过在资源中放置单个属性,您可以一次使用该资源来影响所有样式。如果您没有使用资源,而是尝试在整个应用程序(或其中的一部分)中使用一致的 FontFamily,那么您必须一次通过每种样式来更新它。

为了在混合中创建具有多个属性的样式,您可以执行以下操作:

  • 选择您想要设置样式的控件(控件的类型将用作样式的 TargetType)
  • 从菜单中选择对象->编辑样式->创建空
  • 输入您要分配给样式的键(这是您将用来引用样式的名称)
  • 转到属性选项卡并开始应用该样式所需的外观/感觉
于 2009-02-07T14:04:01.137 回答
3

它允许您在更精细的级别重用字体细节,而不是必须定义字体定义的所有元素。您可能有几种样式都继承自相同的字体大小定义。然后,您的设计师可以更改字体大小,所有使用它的样式都会自动更新外观。

于 2009-02-07T13:58:13.597 回答
1

字体的每个实例都将使用自己的资源,如果多个这样的定义引用相同的字体并不重要。

在两种不同的样式中使用相同的字体最终会产生两个字体实例(当应用样式时)。Instade,您可以将字体定义为自己的样式,并在其他样式中使用该样式。在这种情况下,两种样式都会使用一次字体资源的运行时实例。

如果您有非常复杂的资源字典(例如,您正在创建一个主题),最好将通用资产(如特定颜色画笔或字体)定义为独立资源(或命名样式)并在其他复杂的样式以节省系统资源。

关于您关于 Blend 的问题,它简单地执行了这种最佳实践。

于 2010-06-03T02:44:09.917 回答
0

这可以通过创建一个辅助类来使用和包装您的样式来实现。这里提到的 CompoundStyle展示了如何做到这一点。有多种方法,但最简单的方法是执行以下操作:

<TextBlock Text="Test"
    local:CompoundStyle.StyleKeys="headerStyle,textForMessageStyle,centeredStyle"/>

博客文章讨论了 Win8 和 Windows Phone,但同样的代码也适用于 WPF(减去不需要的 Utilies 类)

希望有帮助。

于 2012-10-04T15:27:52.800 回答