WPF学习之路(八)页面

传统的应用程序中有两类应用程序模式:桌面应用,Web应用。WPF的导航应用程序模糊了这两类应用程序的界限的第三类应用程序

WPF导航表现为两种形式,一是将导航内容寄宿于窗口,二是XAML浏览器应用程序

四个核心要素:Page\HyperLink\NavigationServices\Journal

Page

WPF中的Page相比Window来说更加的精简,没有提供一个Show或者是Hide的方法,而是通过链接的方式进行页面切换。一般来说Page不设置自身的大小,因为页面的尺寸由包含它的宿主窗体来决定的。

新建一个Page

public partial class MyCustomPage : Page
{
    public MyCustomPage()
    {
        InitializeComponent();
        this.Title = "没有对窗口尺寸进行配置";
    }

    public MyCustomPage(double width, double height, double hostWinWidth, double hostWinHeigth)
        : this()
    {
        this.Width = width;
        this.Height = height;
        this.WindowWidth = hostWinWidth;
        this.WindowHeight = hostWinHeigth;
        this.Title = "对窗口尺寸进行配置";
        this.text.Text = "Width= " + width + "\n\n"
            + "Height= " + height + "\n\n"
            + "WindowWidth= " + hostWinWidth + "\n\n"
            + "WindowHeight= " + hostWinHeigth;
    }

}

App.xaml

<Application x:Class="Alex_WPFAPPDemo05.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Startup="Application_Startup">

App.xaml.cs

private void Application_Startup(object sender, StartupEventArgs e)
{
    NavigationWindow win = new NavigationWindow();
    win.Content = new MyCustomPage();
    //win.Content = new MyCustomPage(300, 300, 500, 500);
    //win.Content = new MyCustomPage(500, 500, 300, 300);
    win.Show();
}

三种情况的效果图

Page的宿主窗口包括浏览器、NavigationWindow、Frame

后两种是WPF提供的,能记录Page的导航记录和提供一系列导航事件。NavigationWindow是顶层窗口不能嵌入到其他控件,Frame是轻量级的,可以嵌入到其他控件

新建一个Page观察下这两种控件的不同

      <Border BorderBrush="Blue" BorderThickness="2" Margin="2">
            <TextBlock x:Name="text" Text="该页面的宿主窗口是一个Frame" HorizontalAlignment="Center" VerticalAlignment="Center" />
        </Border>

CustomPage

<Border BorderBrush="Red" BorderThickness="2" Margin="2">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <TextBlock Grid.Row="0" x:Name="text" Text="该页面的宿主窗口是一个NavigationWindow"
                        HorizontalAlignment="Center" VerticalAlignment="Center"  ></TextBlock>
            <Frame Grid.Row="1" Source="SimplePage.xaml" NavigationUIVisibility="Visible"></Frame>
        </Grid>
    </Border>

To be continue...

时间: 2024-10-06 23:35:15

WPF学习之路(八)页面的相关文章

WPF学习之路(一) 初识WPF

参考<葵花宝典-WPF自学手册> VS2012 先创建第一个WPF小程序 1.创建WPF程序 2.查看Solution,WPF中xaml文件和cs文件经常成对出现 两个主要的类:APP(WPF主程序) MainWindow(程序主窗口) 3.添加Button和Click事件 MainWindow.xaml <Grid> <Button Content="Hello WPF" Margin="5" Click="Button_C

WPF学习之路(九)导航链接

Hyperlink WPF中超链接类型是Hyperlink,除了能在页面之间导航,还能再同一个页面下进行段落导航 实例: <Grid> <FlowDocumentReader> <FlowDocument> <Section LineHeight="25" FontSize="15"> <List> <ListItem> <Paragraph> <Hyperlink Navig

WPF学习之路(四)路由

路由事件概述 功能定义:路由事件是一种可以针对元素树中的多个侦听器(而不是仅针对引发该事件的对象)调用处理程序的事件. 实现定义:路由事件是一个 CLR 事件,可以由RouteEvent 类的实例提供支持并由 Windows Presentation Foundation (WPF) 事件系统来处理. 实例: Xaml <Border Height="50" Width="300" BorderBrush="Gray" BorderThic

Wpf学习之路……

Wpf是 .net中一门做winform的技术,和传统的winform的区别在于: 1.         原来的winform就是拖控件,而wpf的控件都死自己拿标记语言(xaml)来写,类似于web中的html. 2.         开发的模式不一样,winform是mvp事件驱动,比如你得单机刷新按钮,界面的数据才会更新.而wpf是mvvm数据驱动,一旦后台的数据发生了改变,前台界面会自己更新.(初学者不用太纠结这个,先学会怎么用吧.) 两者的优缺点是:winform简单,开发快捷,只需要

WPF学习之路(十)实例:用户注册

通过一个注册用户的实例了解页面间数据的传递 首先构建一个User类  User.cs public class User { private string name; public string Name { get { return this.name; } set { this.name = value; } } private string password; public string Password { get { return this.password; } set { this

WPF学习之路(二) XAML(续)

属性 简单属性 前面用到的Width/Height都是简单属性,其赋值一定要放到双引号里 XAML解析器会根据属性的类型执行隐式转换 与C#的区别 SolidBrush.Color = Colors.AliceBlue; <Button Color = "AliceBlue" /> C#中有的枚举类型可以用(|)运算符组合,在XAML中用(,)分隔 附加属性 附加属性可以用于多个控件,但是在另外一个类中定义的属性,在WPF中常常用于布局 如DockPanel.Dock=&q

WPF学习之路(六)Command

在WPF中,命令绑定机制是相比于事件更高级的概念,把应用程序的功能划分为多个任务,任务由多种途径触发. 应用Command Binding使代码更符合MVVM模式(Model-View-ViewModel),类似于MVC模式(Model-View-Control).这两种模式在以后的BLOG中会有详细的介绍.目的都是为了更好的分离前后台逻辑. 一个简单的Button <Button Content="Button" Click="Button_Click" /

WPF学习之路(三) 属性与依赖

类型是DependencyProperty的属性是依赖属性 依赖属性不同于普通的.Net属性,类似于一个计算过程,根据依赖的值得到最终值. 为什么引入依赖属性: MSDN原文 One of the primary architectural philosophies used in building WPF was a preference for properties over methods or events. WPF的设计思想是侧重属性胜于方法和事件. 实例 依赖属性对资源引用的支持 设

WPF学习之路(七)应用程序和窗口(续)

窗口的生命周期 WPF中一个Window类代表一个窗口 一个的窗口的生命周期也有好几个阶段: 1.构造器被调用 2.Window.Initialized事件被触发 3.Window.Activated事件被触发 4.Window.Loaded事件被触发 5.Window.ContentRendered事件被触发 6.用户和窗口进行交互(Actived与Deactived状态互相切换) 7.Window.Closing事件被触发 8.Window.Uloaded事件被触发 9.Window.Clo