Копилка ответов

Как сделать изображение ссылкой

Нужно поместить элемент 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;
}

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

Thumbnail button

Использование списков переходов (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>

Запустив приложение, вы увидите следующий результат.

Источник: How to get System Environment information in WPF

Четкое отображение текста

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

<Window TextOptions.TextFormattingMode="Display" ...... />

Подробнее почитать на сайте WPF 4.0 Text Stack Improvements

Реклама

где купить ноутбук, аксессуары .