0

動的に読み込まれる 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 が同じアセンブリで定義されているにもかかわらず、これを読み込むと、「不明なタイプの usercontrols:superbutton を読み込めません」で失敗します。

これは、SuperButton にコード ビハインドが関連付けられているためだと思いますか? XamlReader.Load() が必要なものを見つけるのを助ける方法はありますか?

4

1 に答える 1

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

于 2012-07-09T19:52:29.657 に答える