2009-02-07 24 views
4

在Expression Blend中,您可以创建一个字体大小为18的字体,然后创建一个“字体大小的资源”。为什么XAML资源不像CSS样式?

来自HTML/CSS的这个问题,我想不出什么时候我想为“字体大小”和“字体样式”创建样式,为“字体重量”创建一个样式。相反,我想制作一个名为“CompanyHeader”的字体,并在其中设置了10个不同的属性,例如,字体重量,字体样式,字体大小,颜色等。

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

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

回答

9

我有没有混合的经验,但在风格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周较小的风格各设置一个属性我不能使用它们,因为标签的样式财产只能接受一种风格。

+2

但是你可以将样式拆分为3个StaticResources,并在MyStyle中引用它们并在别处重用它们... – 2009-03-25 17:25:23

3

它可以让你在上午重用详细更细致的级别不必定义字体定义的所有元素。您可能有几种样式都从相同的字体大小定义继承而来。然后,您的设计人员可以更改字体大小,所有使用它的样式会自动更新外观。

4

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

为了使具有多个属性的一个风格交融,你可以做到以下几点:

  • 选择您要的风格控制(控制的类型将被用作TargetType的的样式)
  • 从菜单中选择对象 - >编辑风格 - >创建空
  • 输入你想分配给风格(这是您将使用引用样式的名称)
  • 转到属性选项卡中的密钥并开始应用你想要的外观/感觉Ë
1

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

在两种不同的样式中使用相同的字体将以字体的两个实例(应用样式时)结束。 Instade,你可以将字体定义为自己的风格,并使用其他风格的风格。在这种情况下,两种样式都使用字体资源的运行时实例。

如果你有非常复杂的资源字典(比如说你正在创建一个主题),最好将源代码资源(如特定的颜色笔刷或字体)定义为独立的资源(或命名样式)并使用他们在其他复杂的风格,以节省系统资源。

在您对Blend的问题上,它简单地执行了这个最佳实践。

0

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

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

的关于Win8的和Windows Phone博客文章谈判,但相同的代码适用于WPF以及(减去其不需要Utilies类)

希望有所帮助。

相关问题