Библиотека Vista Bridge (исходники)

Источник: habrahabr
raptor

Сегодня я хочу написать немного о библиотеке Vista Bridge, которая "восполняет" некоторую функциональность, которая отсутствует в составе .NET Framework 3.0.


Небольшое введение.

С выпуском .NET FW 3.0, многие разработчики могли заметить, что там не реализованы некоторые вещи, которые были введены в Windows Vista, хотя сам фреймворк был выпушен именно с ее выходом. Это:

  • Vista style Task - диалоги в стиле Vista.
  • File Dialogs - диалоги работы с файлами, которые появились в Windows Vista.
  • Application Recovery and Restart - это функциональность, позволяющая восстанавливать приложение после сбоя.
  • Known Folders - это новый сервис, позволяющий получать быструю информацию об "именованных" каталогах, которые использует ОС Vista (например такая информация, как является ли этот каталог жесткой ссылкой или нет, виртуальный он или нет и т.п.)
  • Network Lists - список сетей.
  • Управление питанием компьютера
  • Контрол типа CommandLink
  • и др.

Конечно, все этого можно реализовать вызовом нативных функций и написание собственных библиотек, что например и было сделано в проекте Paint.NET, но в компании Microsoft видимо решили восполнить этот пробел и выпустили собственную библиотеку, которая содержит недостающую функциональность.
Название этой библиотеки Vista Bridge. Эта библиотека (ее исходный код) входит в состав Windows SDK, но самую свежую версию можно скачать по ссылке указанной выше.

Архив, которые скачивается по указанной ссылке, содержит исходные коды библиотеки и набор примеров.
После сборки библиотеки вы можете подключать ее к любому проекту. Сама библиотека получается не большая, всего порядка 140Кб. НО при написании проекта, вы должны учитывать 2 вещи:

  1. Приложение будет работать только в Windows Vista.
  2. В файл манифеста приложения необходимо добавить (если будут использоваться визуальные контролы) следующие строки
    1. <dependency>
    2.   <dependentAssembly>
    3.    <assemblyIdentity
    4.      type="win32"
    5.      name="Microsoft.Windows.Common-Controls"
    6.      version="6.0.0.0"
    7.      processorArchitecture="*"
    8.      publicKeyToken="6595b64144ccf1df"
    9.      language="*"
    10.     />
    11.   </dependentAssembly>
    12.  </dependency>
    * This source code was highlighted with Source Code Highlighter.
    иначе приложение у вас может свалится (по крайней мере у меня падало, пока я не добавил эти строки).

Пример создание диалогового окна

Чем хороша для WPF эта библиотека, она позволяет создавать Task Dialog в ресурсах (например окна), а потом пользоваться ими.
Ниже я привел пример как с помощью этой библиотеки можно сделать стилизованное диалоговое окно:

  1. <Window x:Class="VBSample.Window1"
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.     xmlns:vl="clr-namespace:Microsoft.SDK.Samples.VistaBridge.Library;assembly=VistaBridgeLibrary"
  5.     Title="Window1" Height="300" Width="300">
  6.  <Window.Resources>
  7.     <vl:TaskDialog x:Key="SampleUACDialog"
  8.                   Caption="Контроль учетных записей пользователей"
  9.                   FooterText="Контроль учетных записей (UAC) помогает предотвратить несанкционированные изменения на компьютере."
  10.                   CollapsedControlText="Сведения"
  11.                   ExpandedText="C:\Windows\System\mmc.exe"
  12.                   MainIcon="Shield" Instruction="Windows требует разрешение на продолжение" Content="Если это действие запущено вами, то продолжайте. Консоль управления MMC">
  13.      <vl:TaskDialogButton Text="Продолжить"/>
  14.      <vl:TaskDialogButton Text="Отмена"/>
  15.     </vl:TaskDialog>
  16.  </Window.Resources>
  17.  <Grid>
  18.     <Button Height="23" HorizontalAlignment="Right" Margin="0,0,26,38" Name="button1" VerticalAlignment="Bottom" Width="75" Click="button1_Click">Button</Button>
  19.  </Grid>
  20. </Window>
* This source code was highlighted with Source Code Highlighter.

и код вызывающий это диалог

private void button1_Click(object sender, RoutedEventArgs e)
    {
     TaskDialog td = (TaskDialog)FindResource("SampleUACDialog");
     td.Show();
    }


* This source code was highlighted with Source Code Highlighter.

Вот, что получается (развернутый и свернутый варианты):




Вместо заключения

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

Многие возможности при создании таких тасков к сожаления не поддерживается (возможно пока). Так, свойство Content может быть только строкой, а было бы неплохо, если бы оно было контейнером для других элементов - можно было бы впихнуть туда, все что душе угодно. Так же нельзя менять размеры таких окон, но это скорее всего ограничения уже самой Windows.


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=19297