Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在没有XAML的情况下,如何使用F#和WPF创建Hello World应用程序?_Wpf_F# - Fatal编程技术网

在没有XAML的情况下,如何使用F#和WPF创建Hello World应用程序?

在没有XAML的情况下,如何使用F#和WPF创建Hello World应用程序?,wpf,f#,Wpf,F#,如何在没有XAML的情况下使用F#和WPF创建Hello World应用程序? 具体来说,实现这一目标的步骤是什么 例如,启动应用程序需要哪些文件 [更新] 我尝试了一些建议,但收到以下错误: 我验证了该项目被设置为启动项目。 我不知道我还需要做什么。首先要理解的是:XAML只是一种(据说更简洁)表示对象图的方法。(顺便说一句,XAML不需要指定WPF UI,理论上它可以用于其他事情) XAML标记对应于实例化的.NET类,属性和嵌套标记(大致)对应于对象属性。除此之外没有什么魔力。所有XAM

如何在没有XAML的情况下使用F#和WPF创建Hello World应用程序?

具体来说,实现这一目标的步骤是什么

例如,启动应用程序需要哪些文件

[更新]

我尝试了一些建议,但收到以下错误:

我验证了该项目被设置为启动项目。
我不知道我还需要做什么。

首先要理解的是:XAML只是一种(据说更简洁)表示对象图的方法。(顺便说一句,XAML不需要指定WPF UI,理论上它可以用于其他事情)

XAML标记对应于实例化的.NET类,属性和嵌套标记(大致)对应于对象属性。除此之外没有什么魔力。所有XAML所做的只是创建一组对象并将它们连接在一起

例如,这:

<Button x:Name="myButton">Click!</Button>
(附加属性、绑定、类型转换器等确实会变得更复杂一些,但我在这里不作详细介绍)


第二个要知道的关键是如何对入口点进行编码。为此,有三个简单的步骤:

  • 创建
    应用程序
  • 创建
    Application.main窗口
  • 调用
    应用程序。运行

  • 下面是一个最小的全功能应用程序(以F#脚本的形式):

    #r“WindowsBase”
    #r“展示中心”
    #r“呈现框架”
    开放系统
    打开System.Windows.Controls
    让按钮=按钮(Content=“单击我!”)
    let label=label(Content=“Hello”)
    
    button.Click.Add(乐趣->标签.Content以原始答案为基础:

    我必须将项目的输出库设置为Windows。

    然后我不得不添加STAThread属性。

    代码如下:

    module Temp
    
    open System.Windows
    open System.Windows.Controls
    open System
    
    [<STAThread>] do ()
    
    let button = Button(Content="Click me!")
    let label = Label(Content="Hello")
    button.Click.Add (fun _ -> label.Content <- "World")
    
    let layout = StackPanel()
    layout.Children.Add label |> ignore
    layout.Children.Add button |> ignore
    
    let window = 
      Window(
        Content = layout,
        Visibility = Visibility.Visible)
    
    let app = Application(MainWindow = window)
    app.Run() |> ignore
    
    模块温度
    开放系统
    打开System.Windows.Controls
    开放系统
    []do()
    让按钮=按钮(Content=“单击我!”)
    let label=label(Content=“Hello”)
    button.Click.Add(乐趣->标签.内容忽略
    layout.Children.Add按钮|>忽略
    让窗口=
    窗口(
    内容=布局,
    可见性=可见性。可见)
    让应用程序=应用程序(主窗口=窗口)
    app.Run()|>忽略
    
    oops。好的。它被保存了。可以找到一个简单的MVC方法提示-
    Library1.fs
    -为什么VS给文件起这个名字?谢谢。我发布了完整的答案。
    #r "WindowsBase"
    #r "PresentationCore"
    #r "PresentationFramework"
    
    open System.Windows
    open System.Windows.Controls
    
    let button = Button(Content="Click me!")
    let label = Label(Content="Hello")
    button.Click.Add (fun _ -> label.Content <- "World")
    
    let layout = StackPanel()
    layout.Children.Add label
    layout.Children.Add button
    
    let window = 
      Window(
        Content = layout,
        Visibility = Visibility.Visible)
    
    let app = Application(MainWindow = window)
    app.Run()
    
    module Temp
    
    open System.Windows
    open System.Windows.Controls
    open System
    
    [<STAThread>] do ()
    
    let button = Button(Content="Click me!")
    let label = Label(Content="Hello")
    button.Click.Add (fun _ -> label.Content <- "World")
    
    let layout = StackPanel()
    layout.Children.Add label |> ignore
    layout.Children.Add button |> ignore
    
    let window = 
      Window(
        Content = layout,
        Visibility = Visibility.Visible)
    
    let app = Application(MainWindow = window)
    app.Run() |> ignore