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 制作为带有单独后端编码的单独页面。我需要在 page1.xaml 中加载 page2.xaml 及其后端编码(单击事件处理程序)。我重申我已经在网上搜索过,但仍然没有找到任何解决此问题的方法。

4

1 回答 1

0

XAML 只是一种使用声明式样式构造对象的方式。它不包含任何“代码”,它只是构造对象。

The code in a page is placed in a codebehind file which is a standard .cs file. Note the "partial" keyword in the codebehind. This means it's just part of a class, with the other part being constructed from the xaml. Both of these parts get compiled into your final class which knows nothing about the xaml used to create it.

If you load a XAML file, that's all you're loading. A object that's constructed from markup.

If you want to encapsulate code behaviour, then you need to load an object, not a xaml file. The most suitable object that comes to mind is the UserControl, which is created from a xaml file and codebehind like you want.

因此,如果您想要显示具有自己行为的对象,请将它们设为用户控件。如果您只是想要具有相同行为的不同显示,则将它们加载为 xaml 文件并手动连接您的事件。

于 2012-05-30T08:49:49.733 回答