为什么XAML资源与CSS样式不同?

时间:2009-02-07 13:12:26

标签: wpf xaml resources blend

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

从HTML / CSS开始,我想不出什么时候我想为“font-size”创建一个样式,为“font-style”创建一个样式,为“font-weight”创建一个样式。相反,我想制作一个名为“CompanyHeader”的字体,并在其中设置10个不同的属性,例如font-weight,font-style,font-size,color等。

为什么在Expression Blend,XAML中有不同之处,为每个属性制作样式/资源的意义是什么?

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

5 个答案:

答案 0 :(得分: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属性只能接受一种样式。

答案 1 :(得分:4)

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

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

  • 选择要设置样式的控件(控件的类型将用作样式的TargetType)
  • 从菜单中选择对象 - >编辑样式 - >创建空
  • 输入您要分配给样式的密钥(这是您将用于引用样式的名称)
  • 转到属性标签,开始应用该样式所需的外观

答案 2 :(得分:3)

它允许您在比定义字体定义的所有元素更精细的级别重用字体详细信息。您可能有多个样式都从相同的字体大小定义继承。然后,您的设计师可以更改字体大小以及使用它的所有样式,然后自动更新外观。

答案 3 :(得分:1)

字体的每个实例都将使用自己的资源,如果多个这样的defenitions引用相同的字体无关紧要。

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

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

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

答案 4 :(得分:0)

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

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

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

希望有所帮助。