关于 WPF 你应该知道的 2000 件事(六)

13 篇文章 5 订阅

WPF 开发人员需要知道的一切

51 – 资源

在 WPF 和 Silverlight 中,术语资源通常是指要在多个地方使用的 .NET 对象或值。资源是在 Silverlight 和 WPF 中重用的基本机制。

资源存储在资源字典中——由它们的键(通常是字符串值键)索引的资源对象的集合。

资源通常表示对象,例如:样式、模板、画笔和颜色。它们还可以表示故事板、变换或 3D 矩阵。

52 – 定义和使用应用程序范围的资源

WPF 资源可以与主 Application 对象相关联,如果您希望它们在整个应用程序中可用。

您可以在主应用程序 XAML 文件 (App.xaml) 中定义应用程序范围的资源。在下面的示例中,我们定义了一个绿色画笔。

<Application x:Class="WpfApplication.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml" Startup="Application_Startup" >
    <Application.Resources>
        <SolidColorBrush x:Key="greenBrush"  Color="Green"/>
    </Application.Resources>
</Application>

要使用此资源,请使用 XAML 扩展来引用静态资源。在下面的示例中,我们将主窗口中按钮的背景颜色设置为我们上面定义的绿色画笔。

<Window x:Class="WpfApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="224" Width="334">
    <Grid>
        <Button Content="Button" Background="{StaticResource greenBrush}"
                Height="23" HorizontalAlignment="Left" Margin="60,57,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
    </Grid>
</Window>

53 – 从代码访问应用程序范围的资源

您可以使用 Application.Resources 属性从代码访问应用程序范围的资源。该属性指向包含 DictionaryEntry 对象集合的 ResourceDictionary。

对于 XAML 中定义的资源,每个条目的键是一个字符串,值是关联资源类型的对象。

例如,对于如下所示的 SolidColorBrush 资源:

<Application.Resources>
    <SolidColorBrush x:Key="greenBrush"  Color="Green"/>
</Application.Resources>

字典条目的 Key 是字符串“greenBrush”,Value 是一个 SolidColorBrush 对象,Color 属性设置为绿色。

SolidColorBrush br = (SolidColorBrush)Application.Current.Resources["greenBrush"];

54 – 应用程序的主窗口

创建至少一个窗口的 WPF 应用程序将始终具有一个主窗口。 Application.MainWindow 属性是对被认为是应用程序主窗口的引用。默认情况下,主窗口是第一个创建的窗口,但您可以在代码或标记 (XAML) 中更改 MainWindow 的值。

55 – Application.ShutdownMode

WPF 应用程序类有一个 ShutdownMode 属性,它根据关闭的窗口指示应用程序何时终止。 默认情况下,此属性的值为 ShutdownMode.OnLastWindowClose。

这表示应用程序将在您关闭所有窗口后终止。 您还可以将该属性设置为 ShutdownMode.OnMainWindowClose。

当您这样做时,您的应用程序将在您关闭其主窗口后立即终止,这将自动关闭该应用程序创建的任何其他打开的窗口。

56 – XAML

XAML(可扩展应用程序标记语言)是一种标记语言,用于在创建 WPF 或 Silverlight 应用程序时以声明方式定义应用程序的外观或行为的各个方面。 XAML 基于 XML 并使用类似 XML 的语法。

在 WPF 和 Silverlight 中,您通常使用 XAML 定义整个用户界面。这是一个例子,定义一个包含一个面板的窗口,该面板又包含两个按钮。

<Window x:Class="WpfApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="224" Width="334">
    <StackPanel Orientation="Horizontal">
        <Button Name="button1" Content="OK" Height="23" Width="75" />
        <Button Name="button2" Content="Cancel" Height="23" Width="75" />
    </StackPanel>
</Window>

XAML 标记(例如窗口、按钮)直接映射到 CLR 对象的实例,而 XAML 属性映射到这些对象的属性和事件。在此示例中,我们创建了 Button 类的两个实例,其 Content 属性的值为“OK”和“Cancel”。

57 – Markup vs. Code

WPF 或 Silverlight 用户界面通常使用标记 (XAML) 以声明方式指定。 XAML 指定要创建的控件及其属性应该是什么。但是这些控件也可以在代码中以程序方式创建(例如 C#)。

例如,请考虑以下在 StackPanel 中创建两个按钮的 XAML 代码:

<Window x:Class="WpfApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="224" Width="334">
    <StackPanel Orientation="Horizontal">
        <Button Name="button1" Content="OK" Height="23" Width="75" />
        <Button Name="button2" Content="Cancel" Height="23" Width="75" />
    </StackPanel>
</Window>

假设 Window 对象已经存在,上面的 XAML 将等效于以下 C# 代码:

private void Window_Initialized(object sender, EventArgs e)
{
    StackPanel sp = new StackPanel();
    sp.Orientation = Orientation.Horizontal;
 
    Button b1 = new Button();
    b1.Name = "button1";
    b1.Content = "OK";
    b1.Height = 23;
    b1.Width = 75;
 
    Button b2 = new Button();
    b2.Name = "button2";
    b2.Content = "Cancel";
    b2.Height = 23;
    b2.Width = 75;
 
    sp.Children.Add(b1);   // Add buttons to StackPanel
    sp.Children.Add(b2);
 
    this.Content = sp;     // Add StackPanel to Window
}

58 – 其他使用 XAML 的地方

除了用于为 WPF 和 Silverlight 应用程序定义用户界面元素之外,XAML 还用于:

  • 在 Windows Workflow Foundation 中定义工作流内容
  • 在 Windows Communication Foundation 中定义服务

59 – Visual Studio 2010 中的 XAML

在典型的独立 WPF 应用程序中,新项目向导将为您的主 Application 对象以及您创建的任何 Window 派生对象生成 XAML。您可以在解决方案资源管理器的简单 WPF 应用程序中看到两个 .xaml 文件。在这里插入图片描述
每个顶级 UI 类型都有一个 .xaml 文件,可以在 XAML 中实例化。每个还有一个关联的 C# 代码隐藏文件,其中将包含相同类型的 C# 实现代码。

如果双击 .xaml 文件之一,该对象的 XAML 代码将显示在设计器窗口的 XAML 选项卡上。
在这里插入图片描述

60 – Expression Blend 中的 XAML

您可以在 Visual Studio 2010 或 Expression Blend 4 中打开 WPF 解决方案。功能上有一些重叠,但这些工具的用途如下:

  • Visual Studio – 开发人员 – 用于编写代码、测试、调试
  • Blend – 设计人员 –用于设计用户界面和用户体验

因为您可以在 Blend 中打开项目,所以您还可以在 Blend 中查看和编辑项目用户界面元素的 XAML。

下面是一个解决方案在 Blend 中的样子:在这里插入图片描述如果双击 MainWindow.xaml,将打开一个设计器,您可以在其中拖放 UI 元素。此窗口的右上角有一个小图标,您可以单击它来访问对象的 XAML:在这里插入图片描述
这会将 MainWindow.xaml 窗口从设计图面切换到 XAML 编辑器,您将看到 MainWindow 对象的 XAML。在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cool2Feel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值