none
Наследование пользовательского элемента управления RRS feed

  • Вопрос

  • Есть пользовательский элемент управления, работает.

    На его базе хочу создать другой

    С#:

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    …………..

    public partial class elementMy : element

    {

        public elementMy(int index):base(index)

        {

        }

        public override void Myfunction()

        {

            base.Myfunction ();

           . . . .

        }

    }

    XMAL:

    <mo:element x:Class="trainer.mo.elementMy"

                xmlns:mo="clr-namespace:trainer.mo"

                xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

                xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

                xmlns:d="http://schemas.microsoft.com/expression/blend/2008"

                >

       

    </mnemo:element>

    При запуске выскакивает ошибка:

    "trainer.mo.element" не может быть корнем файла XAML, так как при его определении использовался язык XAML. – в файле моего нового элемента. Подскажите, что надо поправить, чтобы работало?


    • Изменено yura_ 17 июля 2014 г. 13:21
    17 июля 2014 г. 13:18

Ответы

Все ответы

  • Хочу сказать, что не смог найти в MSDN ничего по этому вопросу. В разделе "Практическое руководство. Наследование класса UserControl" (http://msdn.microsoft.com/ru-ru/library/00ctb4z0(v=vs.110).aspx) ничего нет. Может наследование не поддерживается?
    17 июля 2014 г. 17:30
  • Не доводилась решать такую задачу, но интуитивно - загоните ваш UserControl в dll, а потом ее подключите к проекту и наследуйте. Но это скорее костыльное решение.

    VB.Net - WPF, WinRT, WP

    19 июля 2014 г. 6:17
    Отвечающий
  • Нет, это не помогло. Ошибка та же: наследуемый элемент управления (UserControl) "не может быть корнем файла XAML, так как ... ". Ошибка появляется еще до начала построения решения. Придется обойтись как-то без наследования.
    20 июля 2014 г. 7:06
  • Попробовал в открытом WiNRT приложении такое сделать.

    Создал 2 юзер контрола, MyUserControl1 (в нем вывел текст "Первый") и MyUserControl2(в нем вывел текст "Второй").

    Первый наследуется от UserControl.

    В первом удалил модификатор sealed, что бы была возможность отнаследоваться.

    Второй отнаследовал от первого и в разметке указал корнем "MyUserControl1".

    Теперь использование:

    Сначала на страницу прикрутил первый, т.е. MyUserControl1  и увидел что вывелось "Первый".

    Потом заменил MyUserControl1  на MyUserControl2 и увидел уже текст "Второй".

    21 июля 2014 г. 7:14
  • Мой проект WPF разрабатывается в VS2010.

    21 июля 2014 г. 9:03
  • Да, в ВПФ, на удивление, такого сделать нельзя.

    Вот хоть какое-то решение - http://support.microsoft.com/kb/957231/en-us

    21 июля 2014 г. 9:13
  • Не подойдет. Ключевым здесь является "You need to define your base class all in code without using XAML." В моем случае это более трудоемко, чем сделать новый UserControl, используя уже готовый.  Хотя возможность наследования была бы красивее. Но... видимо, Майкрософт поленился доделать WPF? Как бы совсем не забросил эту технологию.

    21 июля 2014 г. 9:58