2016-05-25 2 views
2

Я знаю, что могу создать приложение WPF с FSharp.ViewModule или FSharp.Desktop.UI. В этом случае я пытаюсь создать часть GUI в C# и получить доступ к ней из F #. Я могу запустить приложение C# из F #, и он показывает MainWindow, но я не могу получить доступ к какому-либо элементу управления из кода. Как я могу обратиться к Button (Name: button) в этой форме? MainWindow или App не показывает его в моей начальной настройке.Доступ к C# WPF из F #

C# View - это просто MainWindow с кнопкой на нем.
enter image description here

F # код это:

open System 
open WpfView  

[<STAThread>] 

do 
    let app = App() 
    let win = MainWindow() 

    app.Run(win) |> ignore 

ответ

7

Контроллеры на WPF являются 'внутренними'. То есть они видны только для кода в той же сборке.

see: Internal access modifier

Ваш F # и C# код в отдельных сборках, чтобы ваш F # код не может получить доступ к внутренним членам классов в коде C#.

Элементы управления автоматически генерируются компилятором xaml, поэтому вы не можете изменить их напрямую, однако простым решением было бы создать общедоступные методы доступа и/или свойства в вашем классе C#, которые будут обращаться к внутренним свойствам.

Кроме того, хотя у вас могут быть причины для структурирования кода таким образом, как у вас есть, возможно, было бы лучше иметь основную точку входа в приложение на сборке C# вместе с кодом WPF и иметь ссылку на вашу логику в F #. Таким образом, вы можете использовать привязку данных для привязки к моделям, которые вы написали в F #.

4

По умолчанию элементы управления в форме WPF объявляются как внутренние и не видны вне сборки формы. Вы можете изменить это в XAML формы WPF, задав атрибут x:FieldModifier так:

<Button x:Name="button" Content="Button" x:FieldModifier="public" /> 

Однако, это было бы лучше дизайн, чтобы дать форме ваши собственные свойства для доступа к данным в форме и не непосредственно обращаться с элементами управления извне.

Смежные вопросы