1

簡単なプログラムがあります。ボタンとフレームのある基本的なキャンバスがあります。

  <Canvas Width="1200" Height="600" Name="frontPanel" Background="Blue">

         <Button Width="200" Height="90" Content="flipme" Click="flipme" VerticalAlignment="Top" HorizontalAlignment="Left" >
                <Button.RenderTransform>
                      <TransformGroup>
                           <TranslateTransform x:Name="BtnMove" X="500" Y="255" />
                      </TransformGroup>    
                </Button.RenderTransform>
          </Button>

          <Frame Name="wow" Width="1200" Height="600"></Frame>
  </Canvas>

私が達成したいのはこれです。バックエンドコーディングを使用して、別のxamlページを現在のページにロードします。私がオンラインで見たのは、別のページをロードし、ロード後にイベントハンドラーを追加する方法だけです。

ページをロードする私のコードは次のとおりです。

     string basePath = AppDomain.CurrentDomain.BaseDirectory;
     string commonPath = basePath.Remove(basePath.Length - @"\bin\Debug\".Length);
     wow.Source = (new Uri(commonPath + "\\Page2.xaml"));

page2.xamlにクリックメソッドがアタッチされていない場合は機能しますが、page2.xamlのボタンにクリックイベントハンドラーをアタッチすると、プログラムは次のように通知します。

Failed to create a 'Click' from the text 'button1_Click_1'.' Line number '12' and line position '144'.

だから私の質問は、後でそれを割り当てることなく、ページとバックエンドコーディングを一緒にロードする方法はありますか?なぜなら、page2.xamlを、別のバックエンドコーディングを使用した別のページとして作成したからです。ページ1.xamlのpage2.xamlを、バックエンドコーディング(クリックイベントハンドラー)とともにロードする必要があります。私はウェブを検索しましたが、まだこの問題の解決策を見つけられないことを繰り返します。

4

1 に答える 1

0

XAMLは、宣言型スタイルを使用してオブジェクトを構築する方法にすぎません。「コード」は含まれず、オブジェクトを作成するだけです。

ページ内のコードは、標準の.csファイルである分離コードファイルに配置されます。コードビハインドの「partial」キーワードに注意してください。これは、それがクラスの一部であり、他の部分はxamlから構築されていることを意味します。これらの部分は両方とも、作成に使用されたxamlについて何も知らない最終クラスにコンパイルされます。

XAMLファイルをロードする場合は、ロードするのはそれだけです。マークアップから構築されたオブジェクト。

コードの動作をカプセル化する場合は、xamlファイルではなくオブジェクトをロードする必要があります。頭に浮かぶ最も適切なオブジェクトはUserControl、xamlファイルと必要に応じてコードビハインドから作成されたです。

したがって、独自の動作でオブジェクトを表示する場合は、それらをUserControlsにします。同じ動作で異なる表示が必要な場合は、それらをxamlファイルとしてロードし、イベントを手動で接続します。

于 2012-05-30T08:49:49.733 に答える