想知道如何使用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()
答案 0 :(得分:0)
Visual Studio的F#工具不支持C#样式的XAML文件编译,因此无法获得与C#相同的行为。我认为你有两个选择:
使用XAML文件和引用F#库创建一个C#项目,该库实现核心功能(或者从F#引用C#库并从F#应用程序中的C#库加载用户界面)
使用XamlReader
对象(see MSDN)并以编程方式加载XAML文件(以简单方式嵌入资源)。您不会获得任何C#编译器生成的功能(例如,x:Name
的所有对象的命名属性),否则,它应该以通常的方式工作。