2010-05-18 226 views
0

想知道如何使用F#中的代碼完成設置Style xaml。該代碼是很簡單的:F#中的Silverlight自定義控件DefaultStyleKey

this.DefaultStyleKey <- typeof<MyControl> 

在C#項目的生成選項允許你標記XAML作爲資源自定義生成的命令:的MSBuild:編譯

我沒有看到它的屬性面板,所以我試圖自己添加它到項目文件我自己...

任何想法?應用程序加載 - 自定義控件沒有輸出(但代碼執行)。

感謝

UPDATE:

我查了清單,並被列入該資源預期我的項目,我移植項目之間...尋找下一個步驟。

更新2:

那麼它可以包括在清單確定 - 但,當我malform的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 

我在這裏得到一個空指針異常。但是我有它在構造函數初始化:的XAML文件彙編

do 
    this.Items <- new CoolMenuItemCollection() 

回答

0

C#的風格不是由F#工具Visual Studio的支持,所以沒有辦法獲得相同的行爲在C#。我認爲你有兩個選擇:

  • (在F#應用程序或引用C#庫從C#庫F#和加載用戶界面)創建XAML文件和參考F#庫,實現了核心功能的C#項目

  • 使用XamlReader對象(see MSDN)並以編程方式加載XAML文件(以簡單方式嵌入資源中)。您將不會獲得任何C#編譯器生成的功能(例如,使用x:Name的所有對象的命名屬性),但除此之外,它應該以通常的方式工作。

+0

這是我用於主頁面的XAML閱讀器嗎?我有一個運行100%f#silverlight 3.0的基本應用程序。我堅持實踐cusom控制。 在應用程序上,我編譯XAML並將其加載到應用程序對象的實現中。很簡單,一切正常; 我正在移植的自定義控件示例(帶跳舞圖標的菜單組件)包含一個定義控件基本樣式的XAML。受保護的對象DefaultStyleKey 從我的理解(而且它非常少),該屬性需要一個字符串來表示默認樣式XAML的「已編譯」XAML。 – akaphenom 2010-05-18 16:25:50

+0

也許使用控件的style屬性。我可以將XAML作爲資源嵌入,並像我爲應用程序對象一樣加載。 – akaphenom 2010-05-18 16:32:42

相關問題