Закрыть приложение Wpf в FSharp Interactive - PullRequest
0 голосов
/ 19 ноября 2018

Я сейчас пытаюсь немного программировать на F # вместе с WPF. Я пытаюсь максимально использовать FSI, но понятия не имею, как с ним работать, если я хочу запустить некоторые окна WPF.

После создания окна с простым

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

если я закрою окно (с x), в следующий раз я попытаюсь (alt + Enter) app.Run(myWindow) Я получаю сообщение об ошибке, в котором говорится, что я не могу запустить более одного System.Windows.Application в одном домене приложений. Должен ли я закрыть окно по-другому? Я пытался использовать app.Shutdown () после закрытия окна, но выдает ошибку о том, что приложение tat не определено.

Когда окно все еще открыто, FSI не отвечает.

Второй вопрос - есть ли способ как-то оперировать с открытым окном? Я имею в виду добавить некоторые элементы управления или изменить существующие во время выполнения из FSI?

Sample.fsx, который можно запустить из FSI для открытия окна WPF, приведен ниже:

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