我想问题是你是否可以使用XAML标记将F#成员指定为事件处理程序:
<Button x:Name="btnClick" Content="Click!" Click="button1_Click" />
Run Code Online (Sandbox Code Playgroud)
据我所知,答案是否定的.
这在C#中的工作方式是事件处理程序的注册是在设计器生成的C#代码(部分类)中完成的(您可以obj在名为eg的文件的目录中看到MainForm.g.cs).F#对WPF设计器没有任何直接支持,因此无法为您生成此内容.你必须编写代码来手动附加事件处理程序(但这很容易).
我在伦敦谈论Silverlight时有一些例子.您可以实现?运算符以获得对XAML元素的良好访问:
type MainPage() as this =
inherit UserControl()
let uri = new System.Uri("/App;component/MainPage.xaml", UriKind.Relative)
do Application.LoadComponent(this, uri)
// Get button using dynamic access and register handler
let btn : Button = this?btnClick
do btnClick.Click.Add(fun _ -> (* ... *))
Run Code Online (Sandbox Code Playgroud)
?我使用的运营商声明是:
let (?) (this : Control) (prop : string) : 'T = // '
this.FindName(prop) :?> 'T
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1780 次 |
| 最近记录: |