Извлечение из UserControl в Silverlight - PullRequest
3 голосов
/ 30 декабря 2008

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

public partial class ClassX : UserControl

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

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

Ответы [ 2 ]

12 голосов
/ 31 декабря 2008

Если вы включите пространство имен вашего базового класса 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();
  }
}
3 голосов
/ 30 декабря 2008

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

...