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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Автоматическое построение интерфейса по образцу 
:(
    Опции темы
ercalote
Дата 23.1.2011, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 23.1.2011

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



Возьмем для наглядности любой мессенджер, к примеру, qip.

При начале диалога с новым юзером появляется новая вкладка с таким же интерфейсом, как и другие.

Как мне представляется, хорошим дизайном было бы прописывание один раз всего этого интерфейса с последующим его подгружением на новые вкладки.

Как такое поведение можно реализовать в WPF?

Предполагается, что образец построен XAML-разметкой.
PM MAIL   Вверх
vikaz
Дата 23.1.2011, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

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



Один из вариантов использовать UserControl

Это сообщение отредактировал(а) vikaz - 23.1.2011, 22:15


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
ercalote
Дата 23.1.2011, 23:13 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 23.1.2011

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



UserControl в данной ситуации выглядит костылем smile
PM MAIL   Вверх
Bars1992
Дата 23.1.2011, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 12.1.2011

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



Всмысле "костылем"? Я считаю это самый разумный ответ. Создаешь свой кантрл, и при необходимости создаешь новый екземпляр. Если говорить на примере аськи то я представляю себе это так:
создаешь екземпляр твоего кантрала и в качестве контекста данных присоиденяешь обект который отвечает за отправку, визуализацию, и прием сообщений. Для работы собектом пишеш байдинг в кантроле к данному обекту. И Всё.

Можно ище использовать ресурсы тоесть, запихнуть туда твое окно, а потом штамповать екземпляри. Но это довольно сложно так как я слышал что нужно использовать ElementFactory или чтото подобное. Вобщем лишний геморой.
PM MAIL ICQ   Вверх
vikaz
Дата 24.1.2011, 06:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

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



Цитата(ercalote @  24.1.2011,  01:13 Найти цитируемый пост)
UserControl в данной ситуации выглядит костылем smile 

Если Вам не сложно, могли бы Вы разъяснить, почему UserControl является "костылем"? Похоже Вы знаете то, что не знают все остальные. Поделитесь своим драгоценным опытом.....  smile 



Цитата(Bars1992 @  24.1.2011,  01:31 Найти цитируемый пост)
Можно ище использовать ресурсы тоесть, запихнуть туда твое окно, а потом штамповать екземпляри. Но это довольно сложно так как я слышал что нужно использовать ElementFactory или чтото подобное. Вобщем лишний геморой. 

 smile 



--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
Bars1992
Дата 24.1.2011, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 12.1.2011

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



Сначала дам цитаты с книжки:

Глава 3:
"... Имея шаблон, нужно заполнить дерево отображения. Оно задается с помощью VisualTree объекта ControlTemplate, которое имеет тип FrameworkelementFactory. Шаблон можно пременять к нескольким елементам управления, но каждый елемент должен встречатся в дереве не более одного раза. Чтоб решить эту проблему, объект FrameworkElementFactory конструирует новый екземпляр дерева отображения дя каждого елемента, используещего данный шаблон ..."


Глава 5:
Сначала идет описание ситуации что если запихнуть в ресурсы объект типа кнопки, то в коде его можно использовать только один раз:
Тут ошибки нету:
Код

    <Window.Resources>
        <Button x:Key="My"/>
    </Window.Resources>
    <StackPanel>
        <Button Content="{StaticResource My}"/>
    </StackPanel>

А тут будет:
Код

    <Window.Resources>
        <Button x:Key="My"/>
    </Window.Resources>
    <StackPanel>
        <Button Content="{StaticResource My}"/>
        <Button Content="{StaticResource My}"/>
        <Button Content="{StaticResource My}"/>
    </StackPanel>


И в конце написано:
"... В главе 3 мы узнали о том, что делать, когда ресурс требуется использовать более одного раза,- прибегнуть к классу FrameworkElementFactory ..."

Я так понял автор предлагает использовать ControlTemplate который каждый раз строит новое дерево отображения елементов, например вот:
Код

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <ControlTemplate TargetType="{x:Type Button}"  x:Key="MyControl">
            <Button>Hello Everyone!!!</Button>
        </ControlTemplate>
    </Window.Resources>
    <StackPanel>
        <Button Template="{StaticResource MyControl}"/>
        <Button Template="{StaticResource MyControl}"/>
        <Button Template="{StaticResource MyControl}"/>
        <Button Template="{StaticResource MyControl}"/>
        <Button Template="{StaticResource MyControl}"/>
    </StackPanel>
</Window>



Или я не так всё понял?


Это сообщение отредактировал(а) Bars1992 - 24.1.2011, 09:55
PM MAIL ICQ   Вверх
vikaz
Дата 24.1.2011, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 869
Регистрация: 15.2.2006

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



Не знаю даже, правильно или нет. Но я пока до такого не опускался. Вот тут приведен код с одной кнопкой, а что будет, если мне надо сформировать окно с 10-15 элементами, притом там будут присутствовать кнопки. Как я должен определить, какая кнопка вызвало определенное событие?


--------------------
user posted image

Нет ничего настолько исправного, чтобы в нем не было ошибок. /Ф. Петрарка/ 
PM MAIL ICQ Skype   Вверх
Bars1992
Дата 24.1.2011, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 12.1.2011

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



Вот:
Код

<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="323" Width="525">
    <Window.Resources>
        <ControlTemplate x:Key="MyTab">
            <StackPanel>
                <TextBlock>Messages window</TextBlock>
                <RichTextBox Height="100"></RichTextBox>
                <TextBlock>Write message here:</TextBlock>
                <RichTextBox Height="100"></RichTextBox>
                <Button>Send</Button>           
            </StackPanel>
        </ControlTemplate>
    </Window.Resources>

    <TabControl Name="Tabs">
        <TabItem  Header="First">
            <ContentControl Template="{StaticResource MyTab}"/>
        </TabItem>
        <TabItem  Header="Second">
            <ContentControl Template="{StaticResource MyTab}"/>
        </TabItem>
    </TabControl>
</Window>



Обрабатывать нажатие кнопки можно привязавшысь к текущему контексту данных. Ну например как в моем примере для каждого таба создавать свой обект переписки. А при нажатии кнопки отыскать этот обект переписки текущего таба и вызвать например метод SendMessage().

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


 




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


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

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