2016-05-11 1 views
0

Я новичок в WPF. Я создаю некоторые примеры классов, чтобы быстро создать окончательный проект. У меня есть CustomControl1 как базовый класс, Generic как базовый xaml и wInherit как производный xaml и класс. XAML моего базового окна находится здесь:реализовать событие click в базе xaml и обрабатывать его в базовом классе в WPF

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:Palayeshgah"> 
<!--x:Class="Palayeshgah.CustomControl1">--> 
<Window.Resources> 
    <Style x:Key="btnClose" TargetType="{x:Type Button}" > 
     <Setter Property="Template"> 
      ... 
     </Setter> 
    </Style> 
</Window.Resources> 

... 

<Grid> 
    <Button Style="{StaticResource btnClose}" Name="btnClose" Content="" HorizontalAlignment="Left" Margin="274,0,0,0" VerticalAlignment="Top" Width="18" Height="21"/> 
</Grid> 

Вот мой полученный XAML:

<ns:CustomControl1 x:Class="Palayeshgah.PL.Base.wInherit" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:ns="clr-namespace:Palayeshgah" 
    Title="Inheritance Sample" Height="300" Width="300" Background="Wheat" MouseEnter="CustomControl1_MouseEnter"/> 

Вот мой базовый класс:

public class CustomControl1 : Window 

И это мой производный класс :

public partial class wInherit : CustomControl1 

Эти коды отлично показывают базовый дизайн. Но я должен переопределить событие click для моей кнопки. Если я добавлю Click="btnClose_Click" в btnClose в базовый xaml, я должен intrtodood класса в Generic.xaml. Так же, как показано ниже:

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:Palayeshgah" 
x:Class="Palayeshgah.CustomControl1"> 

Тогда я получаю сообщение об ошибке, как:

Missing partial modifier on declaration of type 'Palayeshgah.CustomControl1'; another partial declaration of this type exists.

добавить partial к CustomControl1, а затем ошибка изменилась, как показано ниже:

Partial declarations of 'Palayeshgah.CustomControl1' must not specify different base classes 

Я вишу здесь.

Я не забыл про btnClose_Click. Здесь есть событие click в базовом классе:

protected virtual void btnClose_Click(object sender, RoutedEventArgs e) 
    { 
     Close(); 
    } 

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

Может ли кто-нибудь показать мне, как использовать наследование для окна и событий в WPF с любым подходом?

ответ

1

Предлагаю вам не наследовать класс CustomControl1. Вы создаете usercontrol для Generic xaml и включаете его в свой производный xaml.

+0

Я добавил новый 'UserControl' вместо' CustomControl1' и 'Generic' и вызывается с' '. «BaseUserControl» - это новый базовый пользовательский элемент управления. Я состыковал это в новом окне, и это работает как шарм. Благодарим вас за краткую подсказку. –