《Programming WPF》翻译 第6章 2.资源与样式

WPF的样式机制以来于资源体系来定位样式。正如你在第5章看到的,样式在 元素的资源片段中定义,而且样式通过其名字被引用,正如示例6-18所示:

示例6-18

<Window x:Class="ResourcePlay.Window1" Text="ResourcePlay"
    xmlns="http://schemas.microsoft.com/winfx/avalon/2005"
    xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005">

     <Window.Resources>
        <Style x:Key="myStyle">
            <Setter Property="Button.FontSize" Value="36" />
        </Style>
    </Window.Resources>

    <Grid>
        <Button Style="{StaticResource myStyle}">Hello</Button>
    </Grid>
</Window>

然而,如何定义一个样式,使之自动的应用到一个元素,而无需显示指定要 引用的资源——这是可以实现的,而且非常有用——当你需要把一个样式应用到 具有独特类型的所有元素上,而不是把资源引用添加到每个元素上。示例6-19对 示例6-18做了一些修改,展示了隐式声明这一功能。

示例6-19

<Window x:Class="ResourcePlay.Window1" Text="ResourcePlay"
    xmlns="http://schemas.microsoft.com/winfx/avalon/2005"
    xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005">

     <Window.Resources>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Button.FontSize" Value="36" />
        </Style>
    </Window.Resources>

    <Grid>
        <Button>Hello</Button>
    </Grid>
</Window>

注意到Button标签不再有其特定的Style属性。然而,这个样式仍然通过 TargetType应用到Button上,而不是定义一个key,这个样式使用x:Type来设置 TargetType,于是通知XAML为这个TargetType类提供一个System.Type对象。

如果FrameworkElement没有显示指定Style,它总是会寻找一个使用其自身类 型的样式资源,作为其Target类型。

如果你建立了一些非样式的资源,例如SolidColorBrush,同时设置其x:Key 为某个UI元素的类型,如果试着使用该元素的类型就会发生一个错误。这是因为 你创建了一个带有TargetType的Style却没有指定x:Key,x:Key隐式地设置为同 TargetType一样。这个Key用于定位style。因此,通常而言,你应该避免将 x:Key设置为Type类型的对象。

因为元素会在资源中搜索它的样式,你可以利用系统级别的资源。你可以定 义一个样式资源在局部范围内,如果你仅仅希望影响少量的元素;或者在一个广 义范围上,例如Window.Resource;或者在应用程序的范围。而且样式可能延及 到系统级别。这种样式和资源之间的联系是使用皮肤和主体的关键

时间: 2024-08-18 08:27:02

《Programming WPF》翻译 第6章 2.资源与样式的相关文章

《Programming WPF》翻译 第5章 2.内嵌样式

每一个"可样式化"的WPF元素都有一个Style属性,可以在内部设置这个属 性--使用XAML属性-元素的语法(在第一章讨论的),如示例5-4. 示例5-4 <Button x:Name="cell00" /> <Button.Style> <Style> <Setter Property="Button.FontSize" Value="32" /> <Setter Pr

《Programming WPF》翻译 第5章 1.不使用样式

作为一个样式如何使其在WPF使用的例子,,让我们看一下TTT简单的实现, 如示例5-1. 示例5-1 <!-- Window1.xaml --> <Window x:Class="TicTacToe.Window1" xmlns="http://schemas.microsoft.com/winfx/avalon/2005" xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005&quo

《Programming WPF》翻译 第5章 4.元素类型样式

命名样式非常有用,当你得到一组属性并应用到特点的元素上.然而,如果 你想要应用一个统一的样式到所有确定元素类型的实例,设置TargetType而不用 一个Key,如示例5-16所示. 示例5-16 <!-- no Key --> <Style TargetType="{x:Type Button}"> <Setter Property="FontSize" Value="32" /> <Setter Pr

《Programming WPF》翻译 目录

原文:<Programming WPF>翻译 目录 注:第1.2章我只做了笔记,没有翻译,请大家阅读时注意. 还有就是,这本书的英文版本下载:[O'Reilly] Programming Windows Presentation Foundation (2005) - BBL 以下是这本书的目录: 1.Hello, WPF     1.1 WPF from Scratch 基础     1.2 Navigation 导航     1.3 属性元素     1.4 布局     1.6 数据绑定

第四章——SQLServer2008-2012资源及性能监控(2) .

原文:第四章--SQLServer2008-2012资源及性能监控(2) . 本文接着上文继续,讲述如何监控CPU的使用情况 前言: CPU是服务器中最重要的资源.在数据库服务器中,CPU的使用情况应该时刻监控以便SQLServer一直处于最佳状态. 本文将会使用可靠性和性能监视器来获取CPU相关的使用统计信息 可靠性和性能监视器是过去性能监视器工具的加强版.同时拥有性能监视器的全部功能. 性能计数器提供对各种系统活动的统计功能.可以找到有数百种性能计数器来针对Windows操作系统或者第三方应

第四章——SQLServer2008-2012资源及性能监控(3)

原文:第四章--SQLServer2008-2012资源及性能监控(3) 本文为本系列最后一章,监控内存使用.监控服务器的内存是非常重要的事情,有很多情况会引起内存消耗.所以要经常性地做检查. 本文将使用可靠性和性能监视器来获取内存相关的统计.   准备工作: 在开始之前,先来了解一下将要用到的计数器: Ø  Memory: Available Mbytes:提供系统上可用内存的数量. Ø  Memory: Pages/sec:显示有多少页被用于读或写入硬盘,这些基于硬页面错误. Ø  Pagi

第十九章——使用资源调控器管理资源(1)——使用SQLServer Management Studio 配置资源调控器

原文:第十九章--使用资源调控器管理资源(1)--使用SQLServer Management Studio 配置资源调控器 本系列包含: 1. 使用SQLServer Management Studio 配置资源调控器 2. 使用T-SQL配置资源调控器 3. 监控资源调控器   前言:       在前面的章节,提到过可以通过多种配置数据库服务器的方式来提高性能.如索引.统计信息.hints.物理设计和服务器配置等.       当你完成上面那些配置后,还依旧有少量存储过程.查询运行得很慢时

第十九章——使用资源调控器管理资源(3)——监控资源调控器

原文:第十九章--使用资源调控器管理资源(3)--监控资源调控器 前言:       在对每个应用程序配置了资源调控器之后,需要监控资源调控器.可能需要监控资源池的使用和多少个请求被分配到特定的资源池.也可能希望监控internal和default池的活动情况.        本文中,演示使用不同登录账号(AW_WebAppUser和AW_ReportAppUser),并监控CPU和内存资源的使用情况.   准备工作: 本文使用的部分脚本在本系列的第一篇中已经写出.这里不累赘.文中将通过不同账号

第十九章——使用资源调控器管理资源(2)——使用T-SQL配置资源调控器

原文:第十九章--使用资源调控器管理资源(2)--使用T-SQL配置资源调控器 前言: 在前一章已经演示了如何使用SSMS来配置资源调控器.但是作为DBA,总有需要写脚本的时候,因为它可以重用及扩展.并且可以在不同服务器快速部署. 下面来演示如何实现: 步骤: 1.  打开ssms,连到SQLServer.确保登录账号有CONTROLSERVER的权限. 2.  运行下面脚本,删除前面创建过的资源调控器对象: USE master GO DROP WORKLOAD GROUP rg_WebApp