2009-11-11 2 views
1

Мы разрабатываем волшебное WPF-приложение, в котором есть Frame, который перемещается на различные страницы. Я определяю каждую страницу в отдельном файле xaml и xaml.cs, а затем приложение делает фрейм перемещаться между страницей.Как сделать WPF-страницы имеющими общий интерфейс

Все мои страницы в настоящее время наследуются от страницы. Я хотел бы иметь общий интерфейс для всех моих страниц, поэтому я могу получить доступ к ним полиморфно. Однако изменение базового класса страницы приводит к сбою компиляции, так как файлы, автоматически созданные Visual Studio из файла xaml, устанавливают базовый класс на страницу, и я получаю сообщение об ошибке, в которой частичные объявления не должны указывать разные базовые классы.

У меня есть другой интерфейс (например, WizardPage), и все классы реализуют этот интерфейс, но это означает, что каждой странице нужно реализовать все функции intefaces, и это неудобно, поскольку я хочу, чтобы большинство функций , для большинства страниц, для пустых реализаций по умолчанию.

Можете ли вы предложить другие варианты, которые я могу использовать для решения этой проблемы?

Thasnks
splintor

ответ

3

Вы можете сделать корневой тэг своего xaml классу, определенному вами также. Здесь вы должны получить свой базовый класс со страницы, а затем вы можете получить свои классы страниц из своего базового класса.

public class MyBaseClass : Page 
{ 
    ..... 
} 

вы можете получить ваши классы страниц из класса, как это:

public partial class MyDeriveClass : MyBaseClass 
{ 
    ............. 
} 

и в вашем XAML написать

<y:MyBaseClass y="add your Namesapace here" and add other attribute of Page also like default namespace and xmlns:x> 
    ............... 
</y:MyBaseClass> 
+0

Спасибо. Это то, что я искал. Я также нашел ту же проблему, описанную в http://www.nivisec.com/2008/07/handling-xaml-ui-base-classes.html. Сообщение, на которое он ссылался, недоступно, но я использовал Google Cache, чтобы понять, что мне нужно делать. Благодарю. – splintor

0

Сделать вид адаптера страницы, которая расширяет страницу и реализует WizardPage, который обеспечивает пустые реализации методов WizardPage. Затем сделайте, чтобы ваши другие страницы расширили WizardPage.

+0

Но, как я уже сказал, я должен иметь мои страницы наследуют для страницы , иначе моя компиляция ломается, поскольку она несовместима с базовым классом, определенным для них в автоматически сгенерированных файлах. – splintor

+1

Я не вижу, как он сломается, если вы наследуете класс, который наследуется со страницы. – scubabbl

+0

@splintor, посмотрите на решение Анурага. Вы должны отредактировать свой файл xaml, чтобы создать правильный базовый класс. –

Смежные вопросы