将控件添加到自定义基页

时间:2013-02-15 17:47:29

标签: c# silverlight windows-phone-7 windows-phone-8 windows-phone

我正在尝试为我的WP应用创建自定义基页。我是通过创建一个继承自cs的新PhoneApplicationPage类文件来实现此目的的:

public class BasePage: PhoneApplicationPage
{
   //handle common non-visual stuff here
} 

问题是我想在每个使用BasePage的页面上添加一个控件,但是BasePage没有LayoutRoot或者我可以将控件附加到的任何可视元素。有没有办法可以将相同的控件添加到使用BasePage的所有页面,这样我就不必每次都复制/粘贴它?

修改:根据TriggerPin的回答添加XAML。我为BasePage.cs创建了一个新的XAML文件,但这会在BasePage.g.cs中抛出错误: " MyApp.MainPage已经包含' _contentLoaded'"的定义(以及' LayoutRoot'和' InitializeComponent'的类似消息)

<local:BasePage
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:MyApp.Template"
    x:Class="MyApp.MainPage"
    mc:Ignorable="d">

2 个答案:

答案 0 :(得分:2)

请注意,默认情况下,从PhoneApplicationPage派生的类型是部分

 public partial class MainPage : PhoneApplicationPage

部分定义允许您跨多个文件拆分类定义。最常见的是这种类型,定义分为.cs和.xaml文件。

 <phone:PhoneApplicationPage x:Class="MyProject.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone">

     <!-- Custom layout here -->

 </phone:PhoneApplicationPage>

如果您将实现作为部分类并提供基本xaml代码,那么您将能够实现您想要实现的目标。

答案 1 :(得分:0)

您需要一个必须为Panel类型的容器,至少用于添加子控件。 Page只是一个UserControl,无法直接将UIElement添加到其中。

试试这个:

Panel container = // init it from your page, you must have a root element in page.
container.Children.Add(new TextBlock()); // your children control.

我是在Win8中完成的。