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 вещи:
- Приложение будет работать только в Windows Vista.
- В файл манифеста приложения необходимо добавить (если будут использоваться визуальные контролы) следующие строки
- <dependency>
- <dependentAssembly>
- <assemblyIdentity
- type="win32"
- name="Microsoft.Windows.Common-Controls"
- version="6.0.0.0"
- processorArchitecture="*"
- publicKeyToken="6595b64144ccf1df"
- language="*"
- />
- </dependentAssembly>
- </dependency>
* This source code was highlighted with Source Code Highlighter.
иначе приложение у вас может свалится (по крайней мере у меня падало, пока я не добавил эти строки).
Пример создание диалогового окна
Чем хороша для WPF эта библиотека, она позволяет создавать Task Dialog в ресурсах (например окна), а потом пользоваться ими.
Ниже я привел пример как с помощью этой библиотеки можно сделать стилизованное диалоговое окно:
- <Window x:Class="VBSample.Window1"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:vl="clr-namespace:Microsoft.SDK.Samples.VistaBridge.Library;assembly=VistaBridgeLibrary"
- Title="Window1" Height="300" Width="300">
- <Window.Resources>
- <vl:TaskDialog x:Key="SampleUACDialog"
- Caption="Контроль учетных записей пользователей"
- FooterText="Контроль учетных записей (UAC) помогает предотвратить несанкционированные изменения на компьютере."
- CollapsedControlText="Сведения"
- ExpandedText="C:\Windows\System\mmc.exe"
- MainIcon="Shield" Instruction="Windows требует разрешение на продолжение" Content="Если это действие запущено вами, то продолжайте. Консоль управления MMC">
- <vl:TaskDialogButton Text="Продолжить"/>
- <vl:TaskDialogButton Text="Отмена"/>
- </vl:TaskDialog>
- </Window.Resources>
- <Grid>
- <Button Height="23" HorizontalAlignment="Right" Margin="0,0,26,38" Name="button1" VerticalAlignment="Bottom" Width="75" Click="button1_Click">Button</Button>
- </Grid>
- </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.
Ссылки по теме