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

时间:2016-03-23 21:23:27

标签: wpf f#

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

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

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

[UPDATE]

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

enter image description here

我确认该项目已设置为启动项目。 我不确定我还需要做什么。

2 个答案:

答案 0 :(得分:10)

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

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

例如,这个:

<Button x:Name="myButton">Click!</Button>

大致相当于:

let myButton = Button( Content = "Click!" )

(它附加的属性,绑定,类型转换器等确实有点复杂,但我不会在这里进行所有这些)

第二个关键事项是如何编码入口点。为此,有三个简单的步骤:

  1. 创建Application
  2. 创建Application.MainWindow
  3. 致电Application.Run
  4. 这是一个最小的全功能应用程序(以F#脚本的形式):

    #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()
    

答案 1 :(得分:1)

建立原始答案:

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

然后我必须添加STAThread属性。

以下是代码:

public function paginationLinks(){
  $outputString = "";
  $crpage = isset($_GET['page']) && trim($_GET['page']) != ''?trim($_GET['page']):1;
  $q = $this->db->query('SELECT COUNT(*) FROM videos');
  $res = $q->fetch();
  $newsNumber = $res[0];
  $q->closeCursor();
  for($i = 1; $i <= ceil($newsNumber / $this->newsByPage); $i++){
    if($crpage == $i){
      $outputString .="<li class='active'><a href='?page=" . $i . "'>" . $i . "</a></li> ";
    }else{
      $outputString .="<li><a href='?page=" . $i . "'>" . $i . "</a></li> ";
    }
  }
  return $outputString;
}