繁体   English   中英

F#DefaultStyleKey中的Silverlight自定义控件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM