Копилка ответов
Как сделать изображение ссылкой
Нужно поместить элемент Image в HyperLink:
<HyperLink NavigateUri="http://developer.alexanderklimov.ru">
<Image Source="d:\cat.jpg"/>
</HyperLink>
Добавляем кнопки к миниатюре окна (Thumbnail) Windows 7
В миниатюры окна можно вставлять собственные кнопки и управлять программой через них. Например, так устроен Windows Media Player. В WPF 4 этого легко добиться без использования неуправляемого кода, к которому приходится прибегать в Windows Forms.
Добавим в XAML-файле после объекта Windows объект TaskBarItemInfo. Затем описываем нужные кнопки внутри данного объекта:
<Window.TaskbarItemInfo>
<TaskbarItemInfo>
<TaskbarItemInfo.ThumbButtonInfos>
<ThumbButtonInfo ImageSource="D:\Icons\On.ico"
Description="Включить!" Click="ThumbButtonInfo1_Click" />
<ThumbButtonInfo ImageSource="D:\Icons\Off.ico"
Description="Выключить!" Click="ThumbButtonInfo2_Click" />
</TaskbarItemInfo.ThumbButtonInfos>
</TaskbarItemInfo>
</Window.TaskbarItemInfo>
Далее пишем код для события Click:
private void ThumbButtonInfo1_Click(object sender, EventArgs e)
{
// Здесь ваш код
MessageBox.Show((sender as System.Windows.Shell.ThumbButtonInfo).Description);
this.Background = Brushes.Blue;
}
Для простоты мы используем готовые значки на диске, однако графику для кнопок можно описать и как ресурс окна.
![]()
Использование списков переходов (Jump List)
В Windows 7 появилась новая технология Списки переходов (Jump Lists): настраиваемое меню, которое появляется при щелчке правой кнопкой мышки на значке приложения на панели задач. В обычных Windows Forms приходится использовать вызовы системных функций Windows API (неуправляемый код). В WPF 4 можно воспользоваться новым классом JumpList. Добавим в свое приложение два пункта: первый – будет открывать мой сайт, второй - запускать Блокнот. Для этого в файле App.xaml добавляем следующий код после строчки </Application.Resources>
<!-- Начало объявления JumpList: -->
<JumpList.JumpList>
<JumpList ShowFrequentCategory="True" ShowRecentCategory="True">
<JumpTask Title="Освой программирование играючи"
Description="Открыть сайт http://developer.alexanderklimov.ru"
ApplicationPath="http://developer.alexanderklimov.ru"
IconResourcePath="C:\\Program Files\\Internet Explorer\\iexplore.exe" />
<JumpTask Title="Блокнот"
Description="Текстовый редактор"
ApplicationPath="notepad.exe"
IconResourcePath="notepad.exe"/>
</JumpList>
</JumpList.JumpList>

Подробнее о классе JumpList можно почитать на сайте MSDN. Вы также можете указать индекс значка в ресурсах, добавить в меню Недавние документы и многое другое.
Как вывести диалоговое окно, подтверждающее закрытие окна
У объекта Windows есть cобытие Closing, которое возникает перед тем, как пользователь закрывает окно. Это событие можно отменить и тем самым не дать окну закрыться. Часто этот прием используют, чтобы запросить у пользователя дополнительное подтверждение.
Добавляем в xaml-файле событие Closing следующим образом:
<Window ...
Closing="WindowClosing"
>
Далее в обработчике события пишем код (cs-файл):
private void WindowClosing(object sender, System.ComponentModel.CancelEventArgs e)
{
if (MessageBox.Show("Вы уверены, что хотите закрыть окно?",
"Закрытие окна",
MessageBoxButton.YesNo) == MessageBoxResult.No)
{
// воспрепятствовать закрытию окна
e.Cancel = true;
}
else
{
// окно будет закрыто
}
}
Тепперь окно закроется только в том случае, если пользователь ответит Да в окне сообщения MessageBox.
Перетаскивать форму без заголовка
Если у формы нет заголовка, то перетащить такую форму не получится. Нужно написать дополнительный код. Раньше для этой цели использовался неуправляемый код. В WPF эта проблема решается очень просто.
В XAML-файле задаем обработчик события MouseDown
<Window ... MouseDown="win_MouseDown" ...>
Затем в коде программы пишем:
private void win_MouseDown( object sender, MouseButtonEventArgs e )
{
if ( e.LeftButton == MouseButtonState.Pressed )
this.DragMove();
}
Получить системную информацию
С помощью WPF можно легко получить системную информацию (операционная система, версия .NET, имя машины, имя пользователя, имя домена, путь к папке, командную строку).
Сначала добавьте пространство имен для сборки mscorlib.
xmlns:r="clr-namespace:System;assembly=mscorlib"
Далее напишите код для xaml:
<TextBlock>
<Label Content="Operating System Version : "></Label>
<Label Content="{x:Static r:Environment.OSVersion}"></Label>
<LineBreak></LineBreak>
<Label Content="Dot NET Version : "></Label>
<Label Content="{x:Static r:Environment.Version}"></Label>
<LineBreak></LineBreak>
<Label Content="Machine Name : "></Label>
<Label Content="{x:Static r:Environment.MachineName}"></Label>
<LineBreak></LineBreak>
<Label Content="User Name : "></Label>
<Label Content="{x:Static r:Environment.UserName}"></Label>
<LineBreak></LineBreak>
<Label Content="User Domain Name : "></Label>
<Label Content="{x:Static r:Environment.UserDomainName}"></Label>
<LineBreak></LineBreak>
<Label Content="System Directory : "></Label>
<Label Content="{x:Static r:Environment.SystemDirectory}"></Label>
<LineBreak></LineBreak>
<Label Content="Current Directory : "></Label>
<Label Content="{x:Static r:Environment.CurrentDirectory}"></Label>
<LineBreak></LineBreak>
<Label Content="Command Line : "></Label>
<Label Content="{x:Static r:Environment.CommandLine}"></Label>
</TextBlock>
Запустив приложение, вы увидите следующий результат.
Источник:
Четкое отображение текста
В WPF4 появилась возможность отображать более четкий текст для мелких шрифтов. Нужно добавить следующее свойство в элемент вашего окна:
<Window TextOptions.TextFormattingMode="Display" ...... />
Подробнее почитать на сайте

