F#DefaultStyleKey中的Silverlight自定义控件

时间:2010-05-18 15:48:32

标签: silverlight silverlight-3.0 f# custom-controls

想知道如何使用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()

1 个答案:

答案 0 :(得分:0)

Visual Studio的F#工具不支持C#样式的XAML文件编译,因此无法获得与C#相同的行为。我认为你有两个选择:

  • 使用XAML文件和引用F#库创建一个C#项目,该库实现核心功能(或者从F#引用C#库并从F#应用程序中的C#库加载用户界面)

  • 使用XamlReader对象(see MSDN)并以编程方式加载XAML文件(以简单方式嵌入资源)。您不会获得任何C#编译器生成的功能(例如,x:Name的所有对象的命名属性),否则,它应该以通常的方式工作。