Наследование от UserControl в Silverlight

В Silverlight 2 у меня есть следующее объявление класса для элемента управления:

public partial class ClassX : UserControl

Я хочу заменить UserControl на ClassXBase, который является производным от UserControl, но получаю разумную ошибку «Частичные объявления ClassX не должны указывать разные базовые классы»

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


person Guy    schedule 30.12.2008    source источник


Ответы (2)


Если вы включаете пространство имен вашего базового класса UserControl, вы можете делать это, пока используете пространство имен. Например:

public abstract class MyBaseUserControl : UserControl
{
  // ...
} 

Затем вы должны использовать этот класс в XAML (обратите внимание на мое пространство имен, а затем используйте новое пространство имен в качестве корня документа):

<!-- Page.xaml -->
<my:BaseUserControl 
    x:Class="SilverlightApplication11.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:my="clr-namespace:SilverlightApplication11"
    Width="400" Height="300">
    <Grid x:Name="LayoutRoot" Background="White">

    </Grid>
</my:BaseUserControl>

Это не изменит волшебным образом базовый класс в коде программной части, поэтому измените этот код на свой базовый класс:

public partial class Page : BaseUserControl
{
  public Page()
  {
    InitializeComponent();
  }
}
person Shawn Wildermuth    schedule 31.12.2008
comment
Или, что еще лучше, вообще удалите объявление базового класса из кода программной части. - person Ben M; 26.11.2010

Частичный класс UserControl определяется XAML, и платформа ожидает, что он будет производным от UserControl. Что вы пытаетесь достичь? Возможно, вам лучше использовать инкапсуляцию, а не наследование. Если вы должны использовать наследование, тогда ищите наследование от другого. Возможно, вам лучше наследовать от одного другие классы управления, такие как ContentControl или Control. Джесси Либерти делает отличную серию видеороликов об этом на Silverlight.net.

person Michael S. Scherotter    schedule 30.12.2008