Блог Сергея Байдачного

Мой блог о технологиях

Archive for Январь 11th, 2010

Введение в SilverLight 4: Поддержка уведомлений

with one comment

И еще одна возможность приложений, работающих вне браузера, это возможность отображать уведомления. В данном случае под уведомлениями понимаются всплывающие окна, не требующие взаимодействия с пользователем (хотя они способны обрабатывать события от мыши, но не от клавиатуры) и исчезающие через заданный промежуток времени. Примеры таких окон можно найти, например, в приложении Microsoft Outlook, которое отображает всплывающие сообщения при получении нового письма.

Чтобы отобразить уведомление, достаточно создать объект типа NotificationWindow и установить свойство Content у созданного объекта. Свойство Content принимает любой объект, порожденный от FrameworkElement, то есть любой контейнер. После установки свойств Content, Width, Height, достаточно вызвать метод Show, принимающий время показа окна в миллисекундах.

Рассмотрим пример приложения, работающего вне браузера и отображающего примитивное окно в момент запуска. Интерфейс приложения реализуем следующим образом:

<UserControl x:Class="Notify_Chapter0.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid x:Name="LayoutRoot" Background="White">
        <StackPanel HorizontalAlignment="Center">
            <TextBlock Text="Notification Demo" 
               TextAlignment="Center" FontSize="18">
            </TextBlock>
            <Button Name="btn" Visibility="Collapsed" 
               Content="Инсталировать приложение" FontSize="18" 
               Click="Button_Click"></Button>
            <TextBlock Name="txt" Visibility="Collapsed" 
               TextWrapping="Wrap" TextAlignment="Center" 
               Text="Приложение должно быть запущено вне браузера" 
               FontSize="18">
            </TextBlock>
        </StackPanel>
    </Grid>
</UserControl>

Во время запуска приложения, необходимо проверить, действительно ли приложение запущено вне браузера, и только затем приступать к созданию окна. Вот как это можно реализовать:

public MainPage()
{
    InitializeComponent();
 
    if (App.Current.IsRunningOutOfBrowser)
    {
        NotificationWindow notify = new NotificationWindow();
        
        StackPanel panel = new StackPanel();
        panel.Background = new SolidColorBrush(Colors.Gray);
        panel.Width = 250;
        panel.Height = 50;
 
        TextBlock header = new TextBlock();
        header.Text = "New message";
        header.FontWeight = FontWeights.Bold;
 
        TextBlock message = new TextBlock();
        message.Text = "This is a new message";
 
        panel.Children.Add(header);
        panel.Children.Add(message);
 
        notify.Content = panel;
        notify.Width = panel.Width;
        notify.Height = panel.Height;
        notify.Show(10000);
    }
    else
    {
        if (App.Current.InstallState == InstallState.Installed)
        {
            txt.Visibility = Visibility.Visible;
        }
        else
        {
            btn.Visibility = Visibility.Visible;
        }
    }
}
 
private void Button_Click(object sender, RoutedEventArgs e)
{
    App.Current.Install();
}

В результате, после запуска приложения, на экране можно увидеть следующую картину:

clip_image002

Как видно, уведомление отображается в системной области с небольшим отступом от нее (по 44 единицы).

Данная функциональность может быть полезна при обработке обновлений, коммуникациях, асинхронной обработке данных и др.

Реклама

Written by Sergiy Baydachnyy

11.01.2010 at 15:18

Опубликовано в SilverLight

Tagged with

Введение в SilverLight 4: Управление окном приложения

3 комментария

Еще одна возможность приложений, работающих вне браузера, это поддержка объекта типа Window. С помощью класса Window, разработчик способен управлять окном во время работы приложения.

Естественно, что объект типа Window создается «за сценой», а разработчик может получить доступ с помощью свойства MainWindow объекта Application.

Среди основных свойств класса Window можно выделить следующие:

· Height – определяет высоту окна;

· Width – определяет длину окна;

· Left – задает отступ от левой границы экрана;

· Top – задает отступ от верхней границы экрана;

· IsActive – возвращает true, если окно активно в данный момент и находится в фокусе. В противном случае возвращает false;

· TopMost – если это свойство установлено в true, то окно всегда располагается поверх других окон (всегда находится на экране);

· WindowState – определяет состояние окна (Normal, Minimize, Maximize).

Среди методов можно выделить лишь Activate, который активирует окно приложения, выводя его на передний план и передавая ему фокус.

Стоит также отметить, что устанавливать свойства объекта, порожденного от Window можно лишь в ответ на действия пользователя (нажатие кнопки и др.) либо в обработчике события Startup объекта Application (либо до Startup).

Нужно отметить, что SilverLight 4 поддерживает специальный раздел в конфигурационном файле, позволяющий установить начальные параметры окна. Вот как может выглядеть часть конфигурационного файла с установленными параметрами:

<OutOfBrowserSettings>
  <OutOfBrowserSettings.WindowSettings>
    <WindowSettings Title="My Window" 
      Left="double" Top="double"
      Height="double" Width="double" />
  </OutOfBrowserSettings.WindowSettings>
</OutOfBrowserSettings>

Written by Sergiy Baydachnyy

11.01.2010 at 10:42

Опубликовано в SilverLight

Tagged with

Введение в SilverLight 4: RechTextArea элемент управления

3 комментария

Описывая очередную возможность SilverLight 4 почему-то вспомнился лозунг: «Перед использованием – доработать напильником». Действительно, если смотреть на предыдущие посты, то вроде бы функционал и есть, но чего-то все время не хватает. Есть возможность определить контекстное меню, но инфраструктуры для такого меню нет, хотя инфраструктура есть даже для подсказок, есть возможность работать с буфером обмена, но с жесткими ограничениями, есть возможность отображать HTML, но только для приложений, работающих вне браузера. Не исключением является и новый элемент управления, который сразу попал в стандартную поставку SilverLight 4, это RichTextArea.

Уже пару лет разработчики пытаются добиться элемента управления, который бы позволил отображать форматированный текст. Пусть это будет DOCX, RTF, XPS или PDF, это не столь принципиально. Большинство текстовых редакторов спокойно преобразуют текст из одного формата в другой. Вместо ожидаемого элемента разработчикам предоставили RichTextArea, который действительно способен отображать текст с минимальным форматированием, но в своем, только ему понятном, формате. Давайте посмотрим в каком именно.

Ниже пример элемента RichTextArea, отображающего текст с минимальный форматированием:

<RichTextArea HorizontalAlignment="Left" 
    Name="rArea" VerticalAlignment="Top" 
    Height="300" Width="400" >
    <Paragraph>
        <Bold>This is a bold text</Bold>
        <LineBreak></LineBreak>
        <Underline>This is an underline text</Underline>
        <LineBreak></LineBreak>
        <Italic>This is an italic text</Italic>
        <LineBreak></LineBreak>
        This is a button:
        <InlineUIContainer>
            <Button Content="Button"></Button>
        </InlineUIContainer>
    </Paragraph>
</RichTextArea>

В результате на экране отобразится следующий контент:

clip_image002

Как видно, RichTextArea является контейнером для других элементов. Так основным наполнением элемента RichTextArea является набор элементов Paragraph, который описывает параграф текстового документа. В свою очередь параграф может включать набор из следующих элементов:

· Run – задает обычный текст;

· Span – служит для группировки других элементов;

· Bold – определяет жирное начертание символов;

· LineBreak – переход на другую строку;

· Italic – определяет рукописное начертание символов;

· Underline – текст с подчеркиванием;

· HyperLink – создает гиперссылку, которая становится активной только в режиме ReadOnly элемента RichTextArea;

· InlineUIContainer – позволяет вставить в документ любой из элементов, порожденных от UIElement.

Естественно, создавать и заполнять RichTextArea можно и программно. Вот небольшой пример кода:

Bold b = new Bold();
b.Inlines.Add("This is a bold text");
 
Italic i = new Italic();
i.Inlines.Add("This is an italic text");
 
Underline u = new Underline();
u.Inlines.Add("This is an underline text");
 
Paragraph myPar = new Paragraph();
myPar.Inlines.Add(b);
myPar.Inlines.Add(new LineBreak());
myPar.Inlines.Add(i);
myPar.Inlines.Add(new LineBreak());
myPar.Inlines.Add(u);
 
rArea.Blocks.Add(myPar);

Таким образом, RichTextArea является элементом с минимальным интерфейсом, где всю работу необходимо выполнить программисту. Конечно, Вы можете найти примеры готовых методов, позволяющих сохранить и загрузить содержимое RichTextArea, или реализацию удобного интерфейса пользователя (вот один из примеров: http://channel9.msdn.com/learn/courses/Silverlight4/RichTextEditor), но много нужно будет сделать самостоятельно.

Written by Sergiy Baydachnyy

11.01.2010 at 07:19

Опубликовано в SilverLight

Tagged with