加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何使UserControls的代码隐藏继承基类?

发布时间:2020-12-16 01:32:41 所属栏目:百科 来源:网络整理
导读:我有一个页面管理器,它保存一组页面(usercontrols),将自己发送到每个页面,因此可以随时调用其SwitchPage方法,使我能够将链接从一个页面放到另一个页面.这很好用,可以让我快速菜单等. public partial class PageManager : UserControl{ private Dictionarystr
我有一个页面管理器,它保存一组页面(usercontrols),将自己发送到每个页面,因此可以随时调用其SwitchPage方法,使我能够将链接从一个页面放到另一个页面.这很好用,可以让我快速菜单等.

public partial class PageManager : UserControl
{
    private Dictionary<string,UserControl> Pages = new Dictionary<string,UserControl>();

    private string defaultPageIdCode = "page1";
    private UserControl currentPage;
    private string currentPageIdCode;

    public PageManager()
    {
        InitializeComponent();

        LoadPages();
        SwitchPage(defaultPageIdCode);
    }

    private void LoadPages()
    {
        Pages.Add("page1",new Page1(this));
        Pages.Add("page2",new Page2(this));
    }

    public void SwitchPage(string pageIdCode)
    {
        currentPageIdCode = pageIdCode;
        currentPage = Pages[pageIdCode];
        PageArea.Content = currentPage;
    }
}

但是,每个页面(UserControl)都有重复的功能,例如在内部保存PageManager对象,我想将其放在基类中:

的Page1.xaml:

<UserControl x:Class="TestPageManager23434.Page1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <StackPanel Background="White" 
             Width="400"
             Height="400"                
                >
        <TextBlock Text="this is page1"/>
        <Button Content="go to page 2" Click="Button_Click"
                HorizontalAlignment="Left"
                Width="200"
                Height="30"
                />
    </StackPanel>
</UserControl>

Page1.xaml.cs:

public partial class Page1 : UserControl
{
    private PageManager pageManager;

    public Page1(PageManager pageManager)
    {
        this.pageManager = pageManager;
        InitializeComponent();
    }

    private void Button_Click(object sender,System.Windows.RoutedEventArgs e)
    {
        pageManager.SwitchPage("page2");
    }
}

Page2.xaml:

<UserControl x:Class="TestPageManager23434.Page2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <StackPanel Background="White"
                Width="400"
                Height="400"
                >
        <TextBlock Text="this is page2"/>
        <Button Content="go back to page 1" Click="Button_Click"
                HorizontalAlignment="Left"
                Width="250"
                Height="30"
                />
    </StackPanel>
</UserControl>

Page2.xaml.cs:

public partial class Page2 : UserControl
{
    private PageManager pageManager;

    public Page1(PageManager pageManager)
    {
        this.pageManager = pageManager;
        InitializeComponent();
    }

    private void Button_Click(object sender,System.Windows.RoutedEventArgs e)
    {
        pageManager.SwitchPage("page1");
    }
}

如何让每个UserControl继承一个基类?它不起作用,因为每个UserControl都有不能继承的XAML.如果我尝试从继承UserControl的普通类继承,那么它告诉我:

Partial declarations of
‘TestPageManager23434.Page2’ must not
specify different base classes

解决方法

而不是将根元素声明为UserControl,而是将其声明为派生类.您还需要指定命名空间,例如

<local:PageBase x:Class="TestPageManager23434.Page2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:TestPageManager23434">
</local:PageBase>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读