• 初学WPF


        实习工作比较空,所以就学点东西充实下自己。学校里学了好几年的C#,asp.net。看论坛上说会WPF就业比较好,所以就看着书学习下。

    构建无XAML 的WPF 应用程序:

    创建一个Visual C# 的“控制台应用程序”SimpleWPFApp:(如果直接创建“WPF 应用程序”,则会自动生成若干XAML 文件)

    主程序代码:

    using System;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Input;
    namespace SimpleWPFApp
    {
        // 在此首例中,我们定义一个简单的类类型,表示应用程序本身和主窗口
        class MyWPFApp : Application
        {
            [STAThread]
            static void Main()
            {
                MyWPFApp app = new MyWPFApp();
                // 处理Startup 和Exit 事件,然后运行应用程序
                //app.Startup += AppStartUp;
                //app.Exit += AppExit;
                //app.Run(); // 触发Startup 事件
                app.Run(new MainWindow("更好的WPF应用程序",400,300));
            }
            static void AppExit(object sender, ExitEventArgs e)
            {
                MessageBox.Show("应用程序已经推出");
            }
            static void AppStartUp(object sender, StartupEventArgs e)
            {
                // 创建一个Window 对象,并设置若干基本属性
                Window mainWindow = new Window();
                mainWindow.Title = "我的第一个WPF 应用程序!";
                mainWindow.Height = 200;
                mainWindow.Width = 300;
                mainWindow.WindowStartupLocation = WindowStartupLocation.CenterScreen;
                mainWindow.Show();
            }
        }
        class MainWindow : Window
        {
            private Button BitExitApp = new Button();
            public MainWindow(string title, int width, int height)
            {
                BitExitApp.Width = 200;
                BitExitApp.Height = 25;
                BitExitApp.Content = "退出";
                BitExitApp.Click += new RoutedEventHandler(BitExitApp_Clicked);
                this.MouseMove += new MouseEventHandler(Window_MouseMove);
                this.KeyUp += new KeyEventHandler(Window_KeyUp);
                this.AddChild(BitExitApp);
                this.Title = title;
                this.WindowStartupLocation = WindowStartupLocation.CenterScreen;
                this.Width = width;
                this.Height = height;
                this.Show();
            }
            private void BitExitApp_Clicked(object sender, RoutedEventArgs e)
            {
                Application.Current.Shutdown();
            }
            private void Window_MouseMove(object sender,MouseEventArgs e)
            {
                this.Title = e.GetPosition(this).ToString();
            }
            private void Window_KeyUp(object sender,KeyEventArgs e)
            {
                this.Title = e.Key.ToString();
            }
        }
    }

    注意:1.创建项目后打开项目属性选型卡修改项目“输出类型”,改为“Windows 应用程序”。

       2.添加和删除程序集引用

    构建纯XAML 的WPF 应用程序(本人认为这种纯XAML开发不是很实用,还要装一个window sdk。就没有多做研究。)

    XAML语法:

    1.命名空间

    与其他XML 应用文档一样,我们一般会在根元素中定义自己的XML 命名空间。而
    WPF 的XAML 文档的根元素,可以是Application、Window 或Page。我们会在这些根元素
    中,通过XML 文档的xmlns 属性,定义若干自己的XML 命名空间。
    一般我们会将presentation 定义成缺省(无名)的XML 命名空间:
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    WPF 相关的多个.NET 命名空间(如System.Windows、System.Windows.Controls、System.
    Windows.Data、System.Windows.Ink、System.Windows.Media、System.Windows.Navigation
    等) 都被映射到该XML 命名空间中。对应的WPF 程序集为WindowsBase.dll 、
    PresentationCore.dll 和PresentationFramework.dll。

    将XAML 本身定义成名为x 的XML 命名空间:
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    它包含XAML 的关键字和.NET 的System.Windows.Markup 命名空间中的类型子集。
    有时,我们也定义系统命名空间sys:
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    它对应于.NET 的System 命名空间和mscorlib.dll 程序集。

    2.XAML 关键字

    XML 命名空间x 提供了对XAML 关键字和.NET 命名空间System.Windows.Markup 的
    成员的访问。下表列出了所有可用的XAML 关键字:
    数组 Array 标记扩展
    为XAML 中的对象数组提供通用支持,Type 为其必须属性。例
    如:<x:Array Type="sys:String"> <sys:String>Hello</sys:String>
    <sys:String>World</sys:String> </x:Array>
    类 Class 属性
    XAML 编译配置,在标记与代码隐藏之间联接分部类。格式为:
    x:Class="命名空间.类名"
    类修饰符 ClassModifier 属性
    设置生成程序集中类的访问级别,对C# 可取值public(缺省的)
    和internal,必须与x:Class 共同使用,且必须是页中的根元素。
    代码 Code 指令元素
    允许在XAML 页中放置代码,该代码将由XAML 编译器处理。
    x:Code XAML 指令元素必须是带x:Class 属性的根元素的直接子
    元素。x:Code 元素中的代码仍然在所提供的XML 命名空间内进
    行解释。因此,通常还必须将x:Code 中的代码装入CDATA 段中。
    字段修饰符 FieldModifier 属性
    设置生成程序集中类字段的访问级别,对C# 可取值public 和
    internal(缺省的)。x:FieldModifier 仅与具有x:Name 属性的元素
    相关,因为一旦该字段成为公共字段,该名称将用于引用该字段。
    键 Key 属性
    键值,唯一地标识作为资源创建和引用,且存在于资源字典中的
    元素。
    名字 Name 属性
    唯一标识对象元素,以便于从代码隐藏或通用代码中访问实例化
    的元素。x:Name 一旦应用于支持编程模型,便可被视为与由构
    造函数返回的用于保存对象引用的变量等效。
    空 Null 标记扩展 为XAML 属性指定null 值。格式为:属性="{x:Null}"
    共享的 Shared 属性
    当设置为false 时(缺省为true),会修改WPF 资源检索行为,会
    为每个资源请求创建一个新实例,而不是所有请求共享同一个实
    例。
    静态的 Static 标记扩展
    用于引用类型的静态成员,格式为:
    属性="{x:Static [前缀:]类型名.静态成员名}"
    子类 Subclass 属性 用于不支持分部类声明的语言来创建子类。
    类型 Type 标记扩展
    为所提供的类型提供Type 对象,实质上是 C# 中的 typeof() 运
    算符的等效标记扩展。格式为:属性="{x:Type [前缀:]类型名值}"
    类型参数 TypeArguments 属性
    将所需的约束传递到泛型类型的构造函数。格式为:
    x:TypeArguments="{x:Type type1}[,{x:Type type2},...}]"
    必须在同一元素上提供x:Class 属性,并且该元素必须是页中的
    根元素。
    统一标识符 Uid 属性

    在标记元素内提供一个可供本地化进程和工具使用的标识符。
    扩展数据 XData 指令元素
    用于在XAML 页内放置XML 数据岛。其内的XML 元素不会被
    视为WPF 命名空间的一部分,并且可以包含任意良构的 XML。


    使用VS08 构建WPF 应用程序

    创建一个名为“MyWpfApp”的“Visual C#”“WPF 应用程序”项目

    自动生成的命名空间名为我们指定的项目名MyWpfApp,很不错;自动生成的应用程
    序的代码文件名和类名都为App,还可以;但是自动生成的启动窗口的XAML 和C# 代码
    文件名和类名都为Window1(与VB 和C# 的窗体程序的Form1 相似),这就不是我们所期
    望的了。
    我们可以在“解决方案资源管理器”窗格中选中Window1.xaml 项,然后按鼠标右键,
    在弹出的浮动菜单中选“重命名”菜单项,并将文件名改为MainWindow.xaml。系统会自动
    将对应的代码隐藏文件也改为了MainWindow.xaml.cs。

    xaml代码:

    <Window x:Class="WpfApplication1.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="简单XAML 观察器" Height="400" Width="600"
            Loaded="Window_Loaded_1" Closed="Window_Closed_1"
            WindowStartupLocation="CenterScreen">
        <DockPanel>
            <Button DockPanel.Dock="Top" Name="btnViewXaml" Height="40"
                    Width="100" Content="观察XAML" Click="btnViewXaml_Click_1"/>
            <TextBox AcceptsReturn="True" Name="txtXamlData" FontSize="14"
                     Background="Yellow" Foreground="Green" BorderBrush="Blue"
                     VerticalScrollBarVisibility="Auto" AcceptsTab="True"></TextBox>
        </DockPanel>
    </Window>
    

    今天就到次为止吧。第一次有点匆忙!

  • 相关阅读:
    CPU问题导致的大量进程崩溃问题
    coredump的裁剪方法
    GDB中遍历art::Thread打印local reference的脚本
    jemalloc管理块(arena、bin)
    jemalloc存储块(region、run、chunk)
    GDB中打印pthread_internal_t的方法
    FUSE引起的SIGBUS问题分析报告
    GDB中打印ART基础类
    UC浏览器闪退问题分析报告
    『深度实战』天池小目标检测大赛·宫颈癌风险智能诊断推荐
  • 原文地址:https://www.cnblogs.com/zhwdbky/p/4174239.html
Copyright © 2020-2023  润新知