Подтвердить что ты не робот

Как указать другой базовый класс в .xaml файлах (Silverlight)?

Как вы можете указать общий базовый класс в .xaml файлах для отдельных классов страниц Silverlight? У меня есть несколько общих свойств, которые я хотел бы разделить между страницами, но я не знаю, как это сделать без ручного изменения базового класса в файлах .g.cs каждый раз, когда они сгенерированы.

Возможно ли это? Я предполагаю, что это возможно, поскольку ChildControl в Toolkit, например, происходит из другого класса. Я не замечаю ничего очевидного?

4b9b3361

Ответ 1

Все страницы Silverlight на самом деле выводятся из UserControl по умолчанию. Итак, вот что вам нужно сделать. Простой пример, конечно, вы, вероятно, захотите объявить свойства зависимостей, события и т.д.

1. Создайте свой класс с общими свойствами

public class YourUserControlBase : UserControl
{
    public bool SomeProperty {get; set; }
}

2. Создание/изменение страницы XAML

Добавьте пространство имен XML для локальной сборки и пространства имен, которое содержит ваш новый базовый класс, и помните, что вы сохранили атрибут x:Class в верхней части файла, но измените корневой элемент UserControl на локальное имя

Здесь мой обновленный файл:

<local:YourUserControlBase
xmlns:local="clr-namespace:SilverlightApplication1"
x:Class="SilverlightApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">

         

Измените код

(файл Page.xaml.cs, а не автоматически сгенерированный), чтобы правильно наследовать от YourUserControlBase:

public partial class MainPage : YourUserControlBase
{
    public MainPage()
    {
        InitializeComponent();
    }
}

Это должно быть! Удачи.

Ответ 2

Также: когда ваш базовый класс находится в другой сборке (проекте), вы можете сделать это:

xmlns:Custom="clr-namespace:SilverlightApplication1;assembly=[Other.Assembly]"