Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сериализация, объясните одну функцию 
:(
    Опции темы
DenWPF
Дата 4.9.2010, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



Я сериализую richtextbox по статье http://www.gotdotnet.ru/blogs/Vitiy/6547/
но вот там появляется 
Код

FlowDocument deserializedXaml = ParseXAML(s, true);

и описания его нет.
что происходит в нутри этой функции. 

мой сериализированный текст 

Код

<FlowDocument PagePadding="5,0,5,0" AllowDrop="True" NumberSubstitution.CultureSource="User" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:auc="clr-namespace:Adminka.UserControls;assembly=Adminka">
    <Paragraph>
        <InlineUIContainer BaselineAlignment="Bottom">
            <auc:MusicControl Path_file="E:\редактор\WPFRichEditorLibrary_0.0.0.6_src\WPFRichEditorLibrary\WordPadTestApp\WordPadTestApp\sound\read.wav">
                <Border>
                    <DockPanel LastChildFill="False">
                        <Button Name="play" VerticalAlignment="Top">Play</Button> 
                        <Button Name="stop" VerticalAlignment="Top">Stop</Button> 
                    </DockPanel>
                </Border>
            </auc:MusicControl>
        </InlineUIContainer>
    </Paragraph>
</FlowDocument>

PM MAIL   Вверх
jonie
Дата 4.9.2010, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 2
Всего: 118



XamlReader.Load надо пологать...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
DenWPF
Дата 4.9.2010, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



он возращает обжект.

я думаю там переопределение той функции,  так как там же есть и мои не стандартные элементы

ошибка - "No matching constructor found on type 'Adminka.UserControls.MusicControl'. You can use the Arguments or FactoryMethod directives to construct this type"

Adminka.UserControls.MusicControl - это именно мой контрол, пишут через аргументы или FactoryMethod - кто что об этом знает?

Это сообщение отредактировал(а) DenWPF - 4.9.2010, 16:26
PM MAIL   Вверх
WolfTheGrey
Дата 4.9.2010, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 21.1.2009
Где: forum.vingrad.ru

Репутация: 2
Всего: 2



правельно он тебе пишет.
Там же еще и кнопки, А с этими контролами ты что ни будь делал?
PM MAIL   Вверх
DenWPF
Дата 4.9.2010, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



нет, не чего не делал.. я не могу понять где с ними что то сдеалть надо...
я понимаю что надо их определить но где и как х3.
PM MAIL   Вверх
WolfTheGrey
Дата 4.9.2010, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 21.1.2009
Где: forum.vingrad.ru

Репутация: 2
Всего: 2



попробуй в ручную, перебрать весь документ и все кнопки сериализовать отдельно.

PM MAIL   Вверх
DenWPF
Дата 4.9.2010, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



так сериализует он правельно.

Код

<auc:MusicControl Path_file="E:\редактор\WPFRichEditorLibrary_0.0.0.6_src\WPFRichEditorLibrary\WordPadTestApp\WordPadTestApp\sound\read.wav">
                <Border>
                    <DockPanel LastChildFill="False">
                        <Button Name="play" VerticalAlignment="Top">Play</Button> 
                        <Button Name="stop" VerticalAlignment="Top">Stop</Button> 
                    </DockPanel>
                </Border>
            </auc:MusicControl>


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


PM MAIL   Вверх
DenWPF
Дата 7.9.2010, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



не кто не знает?
PM MAIL   Вверх
DenWPF
Дата 9.9.2010, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1




Я сериализирую свой usercontrol в richtextbox WPF.
С стандартными элементами все хорошо, а вот со своим контролом трабл.
Не сериализируются События, что и сказано в MSDN 
Цитата

Обработка событий не сохраняется

При сериализации обработчиков событий, которые добавляются с помощью Язык XAML, они не сохраняются.Язык XAML без выделенного кода (также без связанного механизма x:Code) не имеет способа сериализации процедурной логики среды выполнения.Поскольку сериализация является самодостаточной и ограничивается логическим деревом, не существует средства для хранения обработчиков событий.В результате атрибуты обработчика событий, и сам атрибут, и строковое значение имени обработчика, удаляются из выходных данных Язык XAML.


Я попробовал через выделенный  код

Получилось так:
(это мой контрол)
Код

        <DockPanel LastChildFill="False">

            <Button x:Name="play" Click="play_Click" VerticalAlignment="Top" Content="Play"/>
            <Button x:Name="stop" Click="stop_Click" VerticalAlignment="Top" Content="Stop"/>
            <x:Code>
                <![CDATA[
        public void play_Click(object sender, RoutedEventArgs e)
        {
            me.Stop();
            me.Play();
        }

        public void stop_Click(object sender, RoutedEventArgs e)
        {
            me.Stop();
        }
  ]]>
            </x:Code>
        </DockPanel>



а в коде так:

Код

       public MusicControl() 
        {
            InitializeComponent();
            play.Click += new RoutedEventHandler(play_Click);// тут при десериализации не ругается
            stop.Click += new RoutedEventHandler(stop_Click);
           
            me.LoadedBehavior = MediaState.Manual;
            me.UnloadedBehavior = MediaState.Manual;
        }
        public MusicControl(string path_file)
        {
            this.path_file = path_file;
            me.LoadedBehavior = MediaState.Manual;
            me.UnloadedBehavior = MediaState.Manual;
            try
            {
                me.Source = new Uri(path_file);
            }
            catch { }

            InitializeComponent();

            play.Click += new RoutedEventHandler(play_Click);
            stop.Click += new RoutedEventHandler(stop_Click);
        }

        MediaElement me = new MediaElement();
        string path_file = "";

        public string Path_file
        {
            get { return path_file; }
            set 
            { 
                path_file = value;
                me.Source = new Uri(Path_file);
            }
        }



но все равно после десериализации не пашет обработчики =(

сама сериализация\десериализация:

Код

          //FlowDocument fd
        
            string aaa = XamlWriter.Save(fd);

            rtf.RichTextControl.Document.Blocks.Clear();

            byte[] byteArray = Encoding.ASCII.GetBytes(aaa);
            MemoryStream stream = new MemoryStream(byteArray);
            
            object ddd = XamlReader.Parse(aaa);
            FlowDocument deserializedXaml = ddd as FlowDocument;


помогите.

Это сообщение отредактировал(а) DenWPF - 16.9.2010, 23:18
PM MAIL   Вверх
WolfTheGrey
Дата 13.9.2010, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 21.1.2009
Где: forum.vingrad.ru

Репутация: 2
Всего: 2



обработчики и не будут похать так как после пропускания через XamlWriter они отлитают. Это сделано для того, если попадет контрол в форму не поддерживаюшую этот обработчик ,чтоб форма не слитела короч. Надо вручную обработчик прикручивать.
Эта тема уже обсуждалась гдето зимой.
PM MAIL   Вверх
DenWPF
Дата 13.9.2010, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



так посмотри, я их руками прикручиваю...
и при этом они как раз не ругаются...но и не работают=(
PM MAIL   Вверх
WolfTheGrey
Дата 27.9.2010, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 21.1.2009
Где: forum.vingrad.ru

Репутация: 2
Всего: 2



еще можно команды прикрутить.
Жаль поздно про них вспомнил :(
PM MAIL   Вверх
DenWPF
Дата 27.9.2010, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



а команды сериализуются?
PM MAIL   Вверх
WolfTheGrey
Дата 27.9.2010, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 21.1.2009
Где: forum.vingrad.ru

Репутация: 2
Всего: 2



если память не изменяет то да. 
Вообще ты читал строчку, которая получается после сериализации?
Код

FlowDocument fd        
 string aaa = XamlWriter.Save(fd);


там будет описание всех использованых свойств всех контролов в виде XML разметки (тоько в одну строчку)
PM MAIL   Вверх
DenWPF
Дата 27.9.2010, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

Репутация: нет
Всего: 1



конечно считал, блин просто я с командами так и не смог разобраться=(
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.