Pergunta

Eu decidi que todas as minhas WPF páginas necessário para registrar um evento roteado.Em vez de incluir

public static readonly RoutedEvent MyEvent= EventManager.RegisterRoutedEvent("MyEvent", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(BasePage));

em cada página, eu decidi criar uma página de base (chamada BasePage).Eu coloquei a linha de código acima em minha página de base e, em seguida, mudou algumas de minhas outras páginas para derivar a partir de BasePage.Eu não consigo passar essa mensagem de erro:

Erro 12 'CTS.iDocV7.BasePage' não pode ser a raiz de um arquivo XAML porque foi definido usando o XAML.Linha 1 Posição 22.C:\Work\iDoc7\CTS.iDocV7\UI\Quality\QualityControlQueuePage.xaml 1 22 CTS.iDocV7

Alguém sabe a melhor forma de criar uma página de base quando eu posso colocar eventos, propriedades, métodos, etc., que eu quero ser capaz de utilizar a partir de qualquer wpf página?

Foi útil?

Solução

Aqui está como eu fiz isso no meu projeto atual.

Primeiro eu tiver definido uma classe (como @Daren, Thomas disse: - apenas uma simples classe C#, não associados arquivo XAML), como este (e sim, isso é uma verdadeira aula - melhor não perguntar):

public class PigFinderPage : Page
{
    /* add custom events and properties here */
}

Em seguida, criar uma nova Página e alterar a sua declaração XAML para isso:

<my:PigFinderPage x:Class="Qaf.PigFM.WindowsClient.PenSearchPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="clr-namespace:Qaf.PigFM.WindowsClient"
    />

Assim, declaro-o como um PigFinderPage no "meu" espaço de nomes.Qualquer largura de uma página de recursos de que você precisa ter para ser declarado usando uma sintaxe similar:

<my:PigFinderPage.Resources>
    <!-- your resources go here -->
</my:PigFinderPage.Resources>

Por fim, mude para o code-behind para esta nova página, e alterar a sua declaração de classe para que deriva de sua classe personalizada em vez de diretamente a partir da Página, como esta:

public partial class EarmarkSearchPage : PigFinderPage

Lembre-se de mantê-lo como uma classe parcial.

Que trabalho um deleite para mim - eu posso definir um grupo de propriedades personalizadas e eventos de volta em "PigFinderPage" e usá-los em todos os descendentes.

Outras dicas

Além disso, ter um olhar para Eventos Anexados e veja se você pode anexar o seu evento para cada Página em seu aplicativo.Pode ser mais fácil do que um costume intermediário classe.

Eu não estou certo sobre isso, mas olhando para o seu erro, gostaria de tentar definir a classe base com apenas c# (.cs) código - não crie um com XAML, apenas um padrão .cs arquivo que estende o WPF Página de classe.

Aqui é um tutorial muito !é muito simples e fácil.

Pequena atualização :Eu apenas tentei fazer isso e não funcionou.Ele é o que eu mudei para resolver o problema:

1.Em muitos fóruns, você vai ler que o sub-páginas deve herdar de uma simples cs classe, sem XAML.Embora ele funciona.Eu herdar de uma normal XAML página sem qualquer problema.

2.Troquei o seguinte código :

<my:PigFinderPage x:Class="Qaf.PigFM.WindowsClient.PenSearchPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:Qaf.PigFM.WindowsClient"
/>

com

<my:PigFinderPage x:Class="Qaf.PigFM.WindowsClient.PenSearchPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="using:Qaf.PigFM.WindowsClient"
/>

porque quando eu tive "clr-namespace" em vez de "com", o Intellisense pode reconhecer PigFinderPage, mas não do compilador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top