
[英]F# Silverlight 3.0 Custom Control Property throws: NullReferenceException
[英]Silverlight Custom Control in F# DefaultStyleKey
想知道如何使用F#中的代码完成设置Style xaml。 代码很简单:
this.DefaultStyleKey <- typeof<MyControl>
在C#项目中,生成选项使您可以将XAML标记为以下资源的自定义生成命令:MSBuild:Compile
我在属性面板中看不到它,所以我尝试手动将其自己添加到项目文件中...
有任何想法吗? 应用程序加载-自定义控件没有输出(但代码执行)。
谢谢
更新:
我检查了清单,并按预期将资源包括在我的项目和我要移植的项目之间...正在寻找下一步。
更新2:
好吧,它可以包含在清单OK中-但它不会被“编译”,因为当我将XML格式错误时项目的C#版本会在构建过程中引发错误,而F#版本则允许将格式错误的XML引入到程序中。应用。
更新3:
现在加载XAML很好(我想),但是控件的属性存在一些问题:
static member ItemsProperty : DependencyProperty =
DependencyProperty.Register(
"Items",
typeof<MyMenuItemCollection>,
typeof<MyMenu>,
null);
member this.Items
with get () : MyMenuItemCollection = this.GetValue(MyMenu.ItemsProperty) :?> MyMenuItemCollection
and set (value: MyMenuItemCollection) = this.SetValue(MyMenu.ItemsProperty, value);
访问时出现问题:
for menuItem in this.Items do
let contentElement: FrameworkElement = menuItem.Content
我在this.Items上得到一个空指针异常; 但是我已经在构造函数中对其进行了初始化:
do
this.Items <- new CoolMenuItemCollection()
Visual Studio的F#工具不支持XAML文件的C#编译样式,因此无法获得与C#中相同的行为。 我认为您有两种选择:
使用XAML文件和参考F#库创建一个实现核心功能的C#项目(或从F#参考C#库,并从F#应用程序的C#库加载用户界面)
使用XamlReader
对象( 请参见MSDN )并以编程方式加载XAML文件(以简单的方式嵌入资源中)。 您不会获得任何C#编译器生成的功能(例如,所有带有x:Name
对象的命名属性),但是否则,它应该可以以通常的方式工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.