将控件添加到自定义基页

本文关键字:自定义 基页 添加 控件 | 更新日期: 2023-09-27 17:59:28

我正在尝试为我的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">

将控件添加到自定义基页

请注意,默认情况下,从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代码,那么您将能够实现您想要实现的目标。

您需要一个容器,该容器必须至少是Panel类型,才能添加您的子控件。页面只是一个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中做到了。