WPF 学习笔记 - 1. Application

和 WinForm 类似, WPF 同样需要一个 Application 来统领一些全局的行为和操作,并且每个 Domain 中只能有一个 Application 实例存在。和 WinForm 不同的是 WPF Application 默认由两部分组成 : App.xaml 和 App.xaml.cs,这有点类似于 Delphi Form,将定义和行为代码相分离。当然,WebForm 也采用了类似的方式。XAML 从严格意义上说并不是一个纯粹的 XML 格式文件,它更像是一种 DSL,它的所有定义都直接映射成某些代码,只不过具体的翻译工作由编译器完成而已。

下面是一个简单的 App 定义。

public partial class App : Application
{
}


当你在自动生成的 Project 代码中看到 paritial 时,应该下意识去找找 "This code was generated by a tool." …… 不过这次自动生成的代码存放位置更加古怪 —— obj/Debug/App.g.cs

public partial class App : System.Windows.Application
{
  [DebuggerNonUserCode]
  public void InitializeComponent()
  {
    this.StartupUri = new System.Uri("Window1.xaml", System.UriKind.Relative);
  }

  [STAThread]
  [DebuggerNonUserCode]
  public static void Main()
  {
    App app = new App();
    app.InitializeComponent();
    app.Run();
  }
}


App.StartupUri 用于设置 MainWindow,App.Run() 启动消息循环。当然,还有那个 STAThread,这意味着 WPF 依旧使用一个 UI Thread 来处理 UI Message。

我们完全可以舍弃自动生成的代码,自己手工写一个 App。

public class App : Application
{
  [STAThread]
  private static void Main()
  {
    var app = new App();
    var window = new Window { Title = "WPF" };

    app.Run(window);
  }
}


Application 提供了一些实用的属性和方法。

Current: 获取 Domain 中默认的 Application 实例。
MainWindow: 获取主窗口实例。
Windows: 获取所有被实例化的 Window 实例。
ShutdownMode: 指定 Application.Shutdown 方式,包括主窗体关闭,最后一个窗口关闭,以及手工调用 Shutdown()。
Properties: 一个线程安全的全局字典,可用来存储一个公共信息。

Shutdown: 该方法终止 Application Process,可向操作系统返回一个退出码。

我们依然可以使用 Mutex 来阻止运行多个实例。

private void Application_Startup(object sender, StartupEventArgs e)
{
  var createdNew = false;
  var name = Assembly.GetEntryAssembly().FullName;
  new Mutex(true, name, out createdNew);
  
  if (!createdNew)
  {
    MessageBox.Show("There is already an instance running, Exit!");
    Application.Current.Shutdown();
  }
}


当然也可以用 Windows 属性判断窗体是否已经存在。

private void button1_Click(object sender, RoutedEventArgs e)
{
  var window2 = Application.Current.Windows.OfType<Window>().FirstOrDefault(w => w is Window2);
  if (window2 == null) window2 = new Window2();
  window2.Show();
  window2.Activate();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以按照以下步骤来实现该教程实例: 1. 首先,确保您已经安装了 WPF(Windows Presentation Foundation)在您的开发环境中。 2. 在 Visual Studio(或其他适用的 IDE)中,创建一个新的 WPF 项目。 3. 打开项目文件夹,并找到主窗口的 XAML 文件(通常命名为 MainWindow.xaml)。将其打开以编辑。 4. 在 XAML 文件中,找到 `<Grid>` 标签,并在其中添加一个新的 `<lv:Chart>` 标签。确保已引用 `xmlns:lv="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"` 命名空间。 5. 在 `<lv:Chart>` 标签中,添加一个 `<lv:CartesianChart>` 标签。设置 `Series` 属性为 `"{Binding Data}"`,其中 Data 是您将提供的数据源。 6. 在 `<lv:Chart>` 标签中,添加一个 `<lv:CartesianChart.AxisX>` 标签和一个 `<lv:CartesianChart.AxisY>` 标签。在这些标签中,您可以设置有关 X 和 Y 轴的属性,例如标题、刻度、范围等。 7. 在代码文件(例如 MainWindow.xaml.cs)中,创建一个名为 Data 的属性,并将其设置为包含您要显示的数据的集合。确保该属性实现了 `INotifyPropertyChanged` 接口,并在集合更改时触发 `PropertyChanged` 事件。 8. 在窗口的构造函数或其他适当的位置,初始化 Data 属性,并将其绑定到 Chart 控件的 Series 属性。 9. 运行您的应用程序,将会看到一个包含指定数据的 XY 折线图。 请注意,以上步骤假设您已经安装了 LiveCharts 库,并在项目中引用了适当的程序集。如果您尚未安装或引用该库,您可以从 https://www.lvcharts.net/ 下载并安装它。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值