У меня есть страничный менеджер, который хранит коллекцию страниц (usercontrols), отправляет себя на каждую страницу, что может вызвать его метод SwitchPage в любое время, позволяя мне вставлять ссылки с одной страницы на другую. Это работает хорошо и позволяет мне иметь быстрое меню и т.д.Как заставить код UserControls наследовать базовый класс?
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, то он говорит мне:
Частичные декларации «TestPageManager23434.Page2» не должны указывать различные базовые классы
Очевидно, класс в коде должен затем также наследовать от базового класса ... –
На самом деле, я обнаружил на другой день, что вам не нужно указать базовый класс в коде позади, и Resharper будет фактически отмечать это как избыточность. Только одна часть определения частичного класса должна указывать базовый класс, считая, что он должен указать его на несколько частей, если они совпадают. –