如何在没有XAML的情况下使用F#和WPF创建Hello World应用程序?
具体来说,实现这一目标的步骤是什么?
例如,启动应用程序需要哪些文件?
[UPDATE]
我尝试了一些建议并收到以下错误:
我确认该项目已设置为启动项目。 我不确定我还需要做什么。
答案 0 :(得分:10)
要理解的第一个事情是:XAML只是表示对象图的一种(据说更简洁)方式。 (顺便说一句,XAML不需要指定WPF UI,它可以用于其他事情......理论上)
XAML标记对应于实例化.NET类,属性和嵌套标记(大致)对应于对象属性。除此之外没有魔法。所有XAML都只是创建了一堆对象并将它们连接在一起。
例如,这个:
<Button x:Name="myButton">Click!</Button>
大致相当于:
let myButton = Button( Content = "Click!" )
(它附加的属性,绑定,类型转换器等确实有点复杂,但我不会在这里进行所有这些)
第二个关键事项是如何编码入口点。为此,有三个简单的步骤:
Application
Application.MainWindow
Application.Run
这是一个最小的全功能应用程序(以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;
}