首页 > 解决方案 > 在 FSharp Interactive 中关闭 Wpf 应用程序

问题描述

我目前正在尝试与 WPF 一起进行一些 F# 编程。我正在尝试尽可能多地使用 FSI,但是如果我想运行一些 WPF 窗口,我不知道如何使用它。

创建一个简单的窗口后

let myWindow = Window()
let app = Application()
app.Run(myWindow)

如果我关闭窗口(使用 x),下次我尝试(alt+Enter)时会收到一条错误消息,说我不能在同一个 AppDomain 中app.Run(myWindow) 运行多个。System.Windows.Application我应该以其他方式关闭窗口吗?我试图在关闭窗口后使用 app.Shutdown() 但它给出了一个错误,说 tat app 没有定义。

当窗口仍然打开时,FSI 没有响应。

第二个问题 - 有没有办法以某种方式对打开的窗口进行操作?我的意思是在运行时从 FSI 添加一些控件或修改现有控件?

可以从 FSI 运行以打开 WPF 窗口的 Sample.fsx 如下:

#I @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5"
#r "PresentationCore.dll"
#r "PresentationFramework.dll"
#r "System.Xaml.dll"
#r "WindowsBase.dll"

open System.Windows
open System.Windows.Controls

let buttonNames = [
    "First button"
    "Second button"
    "Third button" ]

type StackPanel with
    member stack.add x = stack.Children.Add x |> ignore

let createSmallButton text = 
    let myButton = Button(Content=text)
    myButton.Height <- 40.
    myButton.Width <- 100.
    myButton

let myStack = StackPanel()

let buttons = 
    buttonNames 
    |> List.map createSmallButton 

buttons |> List.iter myStack.add

let myWindow = Window()
myWindow.Content <- myStack

let app = Application()
app.Run(myWindow)

标签: wpff#fsi

解决方案


推荐阅读