« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга



ПнВтСрЧтПтСбВс
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
    Популярное
Функция AccessResource

Cookies - булочки для браузера

Системы голосований на РНР

Функция LoadMenuIndirect

C/C++: Пишем процесс-менеджер

Поиск уязвимостей в программах с помощью анализаторов кода

Кнопки управления

Функция Catch

Воспроизведение звука

Свои настройки Proxy в программе с TWebBrowser.Изменение в ходе выполнения.




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 155
Пользователей: 0

Статьи:: .NET Framework :: Windows Presentation Foundation :: Первое Web-приложение / Подробнее о Grid / Элемент Frame



отправить ссылку другу версия для печати  Обсудить на форуме

Первое Web-приложение / Подробнее о Grid / Элемент Frame

В прошлой статье мы рассмотрели различные способы распространения Avalon-контента. Сегодня я хочу рассмотреть пример создания приложения, используюшего в качестве окна web-броузер.



Представим, что мы хотим создать некую страницу в Internet, работающую по принципу фотоальбома. У нас имеется две цели:
1. Создать не тривиальную страницу
2. Обеспечить легкое обновление контента (добавление новых фотографий) при помощи простой базы данных

Создайте новый проект типа "WinFx Web Browser Application" и задайте ему имя "myPhotoAlbum". Перейдите в режим редактирования XAML-кода файла "Page1.xaml" и внесите следующий код:

 

Код:
<Page x:Class="Page1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Page1"
    >
    <Grid MinHeight ="400" MinWidth ="600">
      <Grid.RowDefinitions >
        <RowDefinition Height ="Auto" />
        <RowDefinition />
      </Grid.RowDefinitions>

      <Grid.ColumnDefinitions >
        <ColumnDefinition Width="Auto" />
        <ColumnDefinition />
      </Grid.ColumnDefinitions>

      <Grid.Background>
        <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
          <GradientStop Color="Yellow" Offset="0"/>
          <GradientStop Color="#FFFFFFFF" Offset="1"/>
        </LinearGradientBrush>
      </Grid.Background>
     
    </Grid>
</Page>

Здесь мы определили заливку нашего основного контейнера Grid в свойстве <Grid.Background> - подобные способы заливки мы обсуждали неоднократно, поэтому я не буду останавливаться на этом подробно.

Хочу обратить ваше внимание на свойства RowDefinitions и ColumnDefinitions. Эти свойства позволяют использовать контейнер Grid "по полной", они позволяют определить строки и столбцы внутри этого контейнера, а также их параметры (будут ли у них фиксированные размеры, либо они будут динамическими). В данном случае мы определили две строки и две колонки. Для первой строки и для первой колонки мы установили значение свойств высоты и ширины соответственно как автоматическое (width= "Auto"), а для второй строки и столбца не задали высоту и ширину. Это означает, что первая строка будет по высоте соответствовать содержащемуся контенту, то же будет происходить по ширине с первым столбцом. А вторая строка и столбец займут все оставшееся место.

Для того, чтобы разместить некий элемент конкретно в какой-то строке контейнера, необходимо в свойствах элемента указать параметр Grid.Row ="номер строки начиная с 0", а для колонки Grid.Column ="номер колонки начиная с 0".

Давайте добавим изображение и небольшую текстовую надпись. Добавьте к ресурсам проекта любое изображение, например в формате PNG (если это вызывает затруднения обратитесь к статье №006) и внесите этот код внутри конструктора Grid после секции, отвечающей за заливку контейнера:

 
Код:
<Image Grid.Column ="0" Grid.Row ="0"
             Source ="MyImage.png" Width ="96"/>

<TextBlock Text ="Моя галерея:"
                 FontSize ="25" Grid.Row ="0" Grid.Column ="1"
                 Margin ="10,30,0,0" />

Мое изображение имеет имя MyImage.png, поэтому не забудьте отредактировать соответствующее свойство Source, если ваш файл имеет другое имя.

Давайте запустим наш проект:



Итак, у нас готов рабочий костяк нашей будущей "страницы". Давайте внесем небольшое изменение - исользуем для надписи нестандартный шрифт. Эта небольшая и простая операция очень пригодится вам, если вы будете разрабатывать web-приложения и как web-мастер следить за тем, чтобы ваши страницы отображались у пользователя именно так, как задумывались.

Я использую шрифт в стиле игры Diablo - вы же можете для примера взять совершенно любой шрифт. Точно также как вы делали с изображением, добавьте файл шрифта к ресурсам проекта. В моем случае файл имеет имя "d2.ttf". Не забудьте убедиться что свойства ресурса заданы так: Build Action - Resource; Copy to output - Do not copy.

Теперь изменим свойства текстового поля:

 
Код:
<TextBlock FontFamily ="/#Diabolic"
                 FontSize ="25" Grid.Row ="0" Grid.Column ="1"
                 Margin ="10,30,0,0"
                 Text ="Моя галерея:"/>

Обратите внимание на значение свойства FontFamily - здесь необходимо указать не имя файла, а название шрифта.

Перекомпилируйте и запустите проект:



Итак, теперь давайте приступим к проектированию основной части нашей "страницы". У нас осталась неиспользованной вторая строка с двумя колонками. В первой колонке втрой строки мы разместим список типа ListBox, который будет отображать уменьшенные размеры изображений нашей галереи, а во второй колонке будет показываться полное содержимое, в зависимости от выбранного в списке пункта.

Откройте приложение блокнот и наберите в нем следующий текст:

 
Код:
<files>
<pic title="Первая" href="First.xaml" src="01.png" />
<pic title="Вторая" href="Second.xaml" src="02.png" />
<pic title="Третья" href="Third.xaml" src="03.png" />
<pic title="Четвертая" href="Forth.xaml" src="04.png" />
</files>

Сохраните файл с именем "files.xml" и добавьте его к ресурсам нашего проекта.

Для чего нам нужен этот файл? Это своеобразная "база данных" контента нашего сайта, написанная в формате XML. При помощи этого формата мы можем очень удобно сохранить различную информацию. А учитывая полную поддержку XML Avalon-ом, этой возможностью грех не воспользоваться.

Итак, в левом столбце второй строки мы расположим список, который будет брать данные из этого XML-файла, а именно будет содержать четыре элемента в виде картинок указанных в свойстве src. При щелчке на выбранной картинке в правом столбце второй строки будет отображаться страница указанная в свойстве href.

Выберите четыре любых изображения в формате PNG, задайте имена в соответствии с XML-файлом - 01,02,03 и 04.png и добавьте все изображения к ресурсам проекта.

Теперь давайте разместим на нашей странице тот самый список, который и будет отображать наши элементы. Поместите этот код после описания элементов Image и TextBlock в теле контейнера Grid:

 
Код:
<ListBox ScrollViewer.VerticalScrollBarVisibility ="Visible"
         Grid.Row ="1"
         Background="{x:Null}" BorderThickness="0,0,0,0"/>

Запустите проект и посмотрите на результат:



Наш список появился в нужном месте. Теперь необходимо его заставить отображать данные в соответствием с нашим XML-файлом. Для этого необходимо создать новый шаблон данных, мы его назовем MyData. Новый шаблон можно задать в секции ресурсов нашей страницы Page.Resources (по аналогии с Window.Resources). Добавьте такой код до описания конструктора Grid:

 
Код:
<Page.Resources>
    <XmlDataProvider Source="files.xml" x:Key ="MyData" XPath ="files/pic"/>
   
    <DataTemplate DataType ="pic">
        <Border BorderThickness="5" CornerRadius="5" BorderBrush="White"
                VerticalAlignment="Center" HorizontalAlignment="Center">
     
           <Image Source="{Binding XPath=@src}" Height="96" Width ="96"/>
        </Border>
    </DataTemplate>
   
</Page.Resources>

Первый тег <XmlDataProvider> определяет новый шаблон данных с именем MyData и указывает, что данные необходимо брать из файла files.xml, а в нем из секции files для элементов pic.
Второй блок <DataTemplate> определяет то, как будет выглядеть наш новый шаблон данных - в частности мы должны отобразить изображение заданное в свойстве src нашего XML-файла, и отобразить это изображение в рамке (Border).

Теперь необходимо подключить этот шаблон данных к нашему списку. Для этого необходимо добавить всего два свойства к элементу ListBox:

 
Код:
<ListBox ScrollViewer.VerticalScrollBarVisibility ="Visible"
         Grid.Row ="1"
         Background="{x:Null}" BorderThickness="0,0,0,0"
         ItemsSource="{Binding Source={StaticResource MyData}}"
         IsSynchronizedWithCurrentItem ="True"/>

Обратите внимание, насколько Avalon представляет унифицированный подход, по сравнению с обычным .NET 2.0 ! Для ListBox абсолютно не важно что за данные он будет отображать! В данном случае это изображения.

Давайте посмотрим на результат:



Итак, наш список отображает именно то, что мы хотели и именно так, как мы хотели! Посмотрите как быстро и просто мы добились нестандартного поведения списка и подключились к XML не написав при этом ни единой строки кода на Visual Basic или C#. Это чистый Avalon - это поразительно!

Оставшийся второй столбец второй строки будет отображать подробные данные - исходя из нашей XML-базы это будут целые страницы в формате XAML. Чтобы это было возможно нам необходимо создать контейнер, который будет отображать эти данные. Добавьте код внутри тела контейнера Grid после описания ListBox-а:

 
Код:
<Frame Grid.Column ="1" Grid.Row ="1"/>

Frame - это новый для нас элемент. Это своего рода контейнер, но в отличие от Grid, WrapPanel и других, которые могут содержать различные элементы, Frame отображает целые XAML-страницы.
C помощью команды меню окна Visual Studio "Project -> Add New Item" добавьте к проекту четыре файла типа "WinFX Flow Document" с именами, соответствующими свойству href нашего XML-файла: First.xaml Second.xaml Third.xaml и Forth.xaml .

Что такое WinFX Flow Document? Этот тип страниц позволяет удобно отображать различные документы. При этом в WPF уже встроены средства автоматического масштабирования с сохранением разметки документа и другие. Вы убедитесь в этом немного позже.

Давайте внесем изменения в наши новодобавленные файлы, чтобы они отражали каждый - уникальное содержимое.
Добавьте такие блоки кода…

- Для файла First.xaml:

 
Код:
<Paragraph FontSize ="15">
    Страница 1
  </Paragraph>

  <Paragraph >
    <Image Source ="01.png"
           HorizontalAlignment ="Center" Width ="128"/>
  </Paragraph>

  <Paragraph>

    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
  </Paragraph>

- Для файла Second.xaml:

 
Код:
<Paragraph FontSize ="15">
    Страница 2
  </Paragraph>

  <Paragraph >
    <Image Source ="02.png"
           HorizontalAlignment ="Center" Width ="128"/>
  </Paragraph>

  <Paragraph>

    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
  </Paragraph>

- Для файла Third.xaml:

 
Код:
<Paragraph FontSize ="15">
    Страница 3
  </Paragraph>

  <Paragraph >
    <Image Source ="03.png"
           HorizontalAlignment ="Center" Width ="128"/>
  </Paragraph>

  <Paragraph>

    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
  </Paragraph>

- Для файла Forth.xaml:

 
Код:
<Paragraph FontSize ="15">
    Страница 4
  </Paragraph>

  <Paragraph >
    <Image Source ="04.png"
           HorizontalAlignment ="Center" Width ="128"/>
  </Paragraph>
 
  <Paragraph>

    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
    Некий текст Некий текст Некий текст Некий текст Некий текст Некий текст
  </Paragraph>

После изменения содержимого файлов не забудьте сохранить ваш проект, чтобы не потерять проделанную работу. Для того, чтобы наша "WPF-страница" заработала так, как мы и хотели вначале, нам осталось дописать всего одну строку кода. Эта строка позволит связать выбранный пункт в ListBox с тем, что будет отображать Frame. Для этого немного измените свойства контейнера Frame:

 
Код:
<Frame Grid.Column ="1" Grid.Row ="1"
       Source ="{Binding Source={StaticResource MyData}, XPath=@href}"/>

Давайте посмотрим на результат:



Так же я хочу обратить ваше внимание на правый нижний угол нашей страницы:



Благодаря тому, что мы использовали тип страницы WinFX Flow Document мы автоматически получили средство для масштабирования изображения, для переключения режима чтения в две или три колонки или для перелистывания страниц. При этом система автоматически переформатирует наш документ так, чтобы он принял наилучший вид в соответствии с исходным форматированием:



Давайте подведем итог нашей сегодняшней работы!
- Мы научились создавать полноценные Web-приложения написанные на базе WPF
- Мы смогли создать страницу использующую взаимосвязь данных из файла XML
- Мы не внесли ни единой строки кода на Visual Basic или C#
- Мы подробнее освоили контейнер Grid
- Мы изучили новый тип элемента Frame и страницы WinFX Flow Document
- Мы научились использовать нестандартные шрифты

Неплохо для столь простого проекта, который можно создать всего за 30 минут, не правда ли?

Источник: TheVista








Подгрузка через AJAX HTML-кода, содержащег....

AJAX

При разработке CMS S.Builder наша команда активно использовала AJAX. Теперь вот решили поделиться накопленным опытом. Начнем с этого хабратопика. Не буду здесь затрагивать различные фреймворки и библиотеки. Свой код всегда роднее. Для работы с AJAX-ом в S.Builder написана библиотека sbAJAX. Можете качать и пользоваться :). В этом файле есть функция sbEvalJS. Для тех, кто не знает, объясню. При подгрузке через AJAX и вставке на страницу HTML-кода, содержащего JavaScript, JavaScript выполняться не будет или полезут баги. Эта функция как раз решает поставленную задачу.


Подробнее... | Рубрика: AJAX | Добавлено: 19.11.2008

Обзор нового релиза самой мощной Ajax библ....

AJAX

Хотя наш обзор немного запоздал, оригинальный Dojo 1.2 вышел в релизной версии ещё 6-го октября, но сейчас мы наверстаем упущенное. И так, Dojo Toolkit — это самая мощная и гибкая ajax-библиотека из всех, что есть на рынке, она активно развивается и имеет большое комьюнити. Кстати, это самое комьюнити, совместно с компанией Sitepen, имеет ещё несколько проектов, среди которых и Cometd и некоторые другие, не менее интересные, о которых мы скоро вам расскажем. Сегодня же все внимание на флагманский продукт — Dojo 1.2.


Подробнее... | Рубрика: AJAX | Добавлено: 19.11.2008

Firebug 1.3 и 1.4 alpha — что нового и инт....

Вебмастеру

Если вы профессиональный веб-разработчик и постоянно имеете дело с разработкой и отладкой сложных AJAX приложений, то наверняка знаете и используете Firebug — плагин для браузера Firefox, предназначенный для отладки и исследования веб-приложений. Текущая его версия, 1.2х достаточно стабильная и функциональна, чтобы помочь в 99% проблем, которые могут возникнуть при разработке. Но и этот инструмент не лишён если не недостатков, то некоторых фич, которые могли бы облегчить работу. И даже идеальный инструмент можно сделать ещё более идеальным, как бы это не звучало.


Подробнее... | Рубрика: Вебмастеру | Добавлено: 19.11.2008

Остальные статьи:

Релиз Microsoft Silverlight 2.0. Что новог...
XML документация в C#
Курсоры в MySQL 5
Microsoft опубликовала подробности о сесси...
Microsoft делится подробностями о том, что...
Тестируем новый javascript от нового брауз...
MySQL Query Cache
Использование провайдеров компиляции в As...
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новы...
Поиск кода Google /* что нового? */
10 jQuery скриптов для улучшения интерфейс...
Генераторы отчетов FastReport 4 и QuickRep...
День программиста — набор стерeотипов
Индусские програмисты
Вышел Django 1.0
Портативная версия Google Chrome Portable
Исходные коды .Net Frameword 3.5 SP1 для о...
Пишем правильный online WYSIWYG-редактор


Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия