2012-07-09 16 views
0

例XAML類型動態加載XAML被加載動態使用具有代碼隱藏

<Grid xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'  
     xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' 
     xmlns:usercontrols='clr-namespace:App.Views.UserControls'> 

     <TextBlock>Why don't you click the button?</TextBlock> 

     <usercontrols:SuperButton 
     Command="{Binding DataContext.OpenURLNew,RelativeSource= 
      {RelativeSource FindAncestor, AncestorType={x:Type ContentPresenter}}" 
     CommandParameter="50"> 

     ClickMe</usercontrols:SuperButton> 
</Grid> 

加載這個失敗,「無法加載未知類型用戶控件:superbutton」,儘管SuperButton中定義的事實相同的組件。

我猜這是因爲SuperButton有關聯的代碼隱藏?有沒有辦法幫助XamlReader.Load()找到它所需要的?

回答

2

你在做什麼應該工作 - 嘗試在xmlns:usercontrols=''中使用完全合格的程序集名稱。

我做了一段時間的確切的事情(也許我寫的netGooey庫可能對你有用)。 netGooey將XAML動態加載到頁面中,並支持用戶定義的控件。

我的XAML標題是這樣的:

<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="499" Height="579" xmlns:playback="clr-namespace:inlayShared.ui.controls.playback;assembly=inlayShared" xmlns:library="clr-namespace:inlayShared.ui.controls.library;assembly=inlayShared">

控制使用,如:

<playback:volumeSlider Maximum="100" Minimum="0" Margin="42,180,62,0" Height="30" VerticalAlignment="Top" TickFrequency="10" TickPlacement="BottomRight" />

和動態XAML加載這樣的:

  _gSystem.invokeOnLocalThread((Action)(() => 
      { 
       FileStream fileStream = File.OpenRead(_sUIFile); 
       DependencyObject dependencyObject = XamlReader.Load(fileStream) as DependencyObject; 
       fileStream.Close(); 

       if (dependencyObject == null) 
        return; 

       Content = dependencyObject; 
      }), true);` 

也許我忘了一些關鍵部分讓XAML注意到自定義控件,但我很確定它剛剛結束工作。

祝你好運。 (希望完全合格的變化修復它爲你)

http://inlay.codeplex.com/SourceControl/changeset/view/42822#549758

+0

這奏效了!謝謝一堆。 Upvoted和接受。一旦我有機會,將看看你的netgooey的東西。一段解釋你已經建立/嘗試實現的內容將很方便。從我所看到的,你必須挖掘代碼才能找出目前的情況。 – 2012-07-09 20:02:21

+0

是的。我不再支持這個項目,所以我不會寫文檔。我提到它主要是因爲可能有一些例子說明你應該如何在那裏做事。如果您有其他WPF /動態XAML問題,您可以通過指向新問題的鏈接回覆此評論,我會看一看。 – 2012-07-09 20:05:34