2009-08-09 14 views
3

私はWPFアプリケーションに含まれるいくつかのライブラリコードを生成したいと思います。状況に応じて、ライブラリがウィンドウをポップアップ表示することがあります。私はXAMLでウィンドウを定義できますが、XAMLをテンプレートとして扱いたいと思います。実行時に、ウィンドウを表示できるように作成しているときに、Xamlテンプレートの特定のタグを実行時定義の値に置き換えます。WPFウィンドウからXamlReader.LoadまたはInitializeFromXamlを使用して、ウィンドウ定義を使用できますか?

私は何をしたいことは、このようなものです:私は、ボタンまたはセクションをXAMLで定義されている例を見てきました

private string XamlTemplate = @" 
    <Window x:Class='@@CLASS' 
      xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' 
      xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' 
      Title='@@TITLE' 
      Height='346' Width='380'> 

     <Grid> 
      ... 

:XamlTemplate文字列は次のようになります

public partial class DynamicXamlWindow : Window 
{ 
    Button btnUpdate = null; 
    public DynamicXamlWindow() 
    { 
     string s = XamlTemplate; 

     // replace some things in the XamlTemplate here 

     Window root = System.Windows.Markup.XamlReader.Load(...); 
     Object _root = this.InitializeFromXaml(new StringReader(s).ReadToEnd()); //?? 

     btnUpdate = // ??? 

     //InitializeComponent(); 
    } 

動的にロードされます。しかし、これはボタンやセクションではありません。 XamlTemplateは、実際のWindowにXAMLを提供します。

InitializeFromXamlまたはXamlReader.Loadのどちらでも可能ですか?もしそうなら、どうですか?

XAMLで定義されたコントロールを取得できます。たとえば、上のコードのbtnUpdateなどです。どうやって?

答えて

4

を呼び出すことです。しかし、背後にあるコードは、あなたがあなたのテンプレートを変更して、それをだますことができるすべての動的なページのために同じである場合:あなたがアクセスしたい場合

XamlReader.Parse(xaml); 

:あなたはこの使用を解析する準備ができたら

private string XamlTemplate = @" 
    <control:BaseWindow 
      xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' 
      xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml' 
      xmlns:control='WhateverHere' 
      Title='@@TITLE' 
      Height='346' Width='380'> 
     <Grid>... 

コードの背後にある項目は、コードビハインドのthis.FindName( "btnUpdate")となります。

2

はい。 xamlでウィンドウを作成したとき、自動生成された部分定義にはInitializeComponentというメソッドが含まれています。このメソッドの内容は基本的に以下のとおりです。クラス属性:

System.Uri resourceLocater = new System.Uri("/SampleWpfApp;component/window1.xaml", System.UriKind.Relative); 
System.Windows.Application.LoadComponent(this, resourceLocater); 

だから、何をしたい、あなたがXを持つ動的なページを作成することはできませんSystem.Windows.Application.LoadComponent(windowInstance, uri);

関連する問題