Списки используемых элементов в панели задач

35

Список недавно использовавшихся документов, который демонстрировался до сих пор, является встроенным в Windows и не требует никакой логики WPF. Однако в WPF предлагаются дополнительные возможности, которые позволяют брать этот список под свой контроль и заполнять его специальными элементами. Для этого потребуется просто добавить в файл App.xaml код разметки, определяющий раздел <JumpList.List>, как показано ниже:

<Application x:Class="WpfApplication1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
    </Application.Resources>
    
    <JumpList.JumpList>
        <JumpList>
            
        </JumpList>
    </JumpList.JumpList>
</Application>

При таком определении специального списка часто используемых элементов Windows перестает отображать список недавних документов. Чтобы вернуть его назад, необходимо явно указать это с помощью свойства ShowRecentCategory:

<JumpList ShowRecentCategory="True">

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

Вдобавок можно создавать собственные элементы и помещать их в желаемую специальную категорию в списке часто используемых элементов. Для этого потребуется добавить в JumpList объекты JumpPath или JumpTask. Ниже показан пример добавления объекта JumpPath, который представляет документ:

<JumpList ShowRecentCategory="True">
   <JumpPath CustomCategory="Sample Documents"
      Path="c:\Samples\samples.testDoc"></JumpPath>
</JumpList>

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

Если категория не указана, Windows будет использовать название Tasks (Задачи). С помощью свойства Path задается путь к файлу, указывающий на нужный документ. При этом должно использоваться полностью уточненное имя файла, файл должен существовать, а его тип должен соответствовать типу файлов, за обработку которых отвечает данное приложение. Если какое-то из перечисленных требований нарушено, элемент не появится в списке часто используемых элементов.

При щелчке на элементе JumpPath происходит в точности то же самое, что и при щелчке на одном из файлов в разделе недавних документов. Windows запускает новый экземпляр приложения и передает ему путь к документу в виде аргумента командной строки.

Объект JumpTask имеет несколько иное предназначение. Если объект JumpPath отображается на документ, то каждый объект JumpTask отображается на какое-то приложение.

Если JumpPath требовал предоставления всего лишь двух деталей, то JumpTask использует гораздо больше свойств, которые перечислены ниже:

Title

Текст, который должен отображаться в списке часто используемых элементов

Description

Текст, который должен отображаться в виде подсказки при наведении курсора мыши на данный элемент

ApplicationPath

Путь к исполняемому файлу нужного приложения. Как и свойство, позволяющее указывать путь к документу в объекте JumpList, свойство ApplicationPath требует применения полностью уточненного имени

IconResourcePath

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

IconResourceIndex

Если ресурс приложения или значков, идентифицированный свойством IconResourcePath, содержит множество значков, в этом свойстве указывается индекс нужного значка

WorkingDirectorу

Рабочий каталог, из которого будет запускаться приложение. Обычно это папка с документами для этого приложения

ApplicationPath

Параметр командной строки, который должен передаваться приложению, такой как имя открываемого файла

Создание списка часто используемых элементов в коде

Хотя список часто используемых элементов легко заполнить за счет добавления соответствующего кода разметки в файл App.xaml, с этим подходом связан один серьезный недостаток. Как было показано, элементы JumpPath и JumpTask требуют, чтобы путь к файлу указывался в полностью уточненном формате. Этот путь часто зависит от способа развертывания приложения и потому не должен кодироваться жестким образом. По этой причине принято создавать или изменять список часто используемых элементов программным образом.

Для конфигурирования списка часто используемых элементов в коде применяются классы JumpList, JumpPath и JumpTask из пространства имен System.Windows.Shell. В следующем примере создается новый объект JumpPath, который должен позволить пользователю открывать приложение Notepad (Блокнот) для просмотра файла readme.txt, хранящегося в текущей папке приложения, где бы то ни было установлено:

private void Application_Startup(object sender, StartupEventArgs e)
        {
            // Извлечение текущего списка часто используемых элементов
            JumpList jumpList = new JumpList();
            JumpList.SetJumpList(Application.Current, jumpList);
                        
            // Добавление нового объекта JumpPath для файла в папке приложения
            string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
            path = Path.Combine(path, "readme.txt");
            if (File.Exists(path))
            {
                JumpTask jumpTask = new JumpTask();
                jumpTask.CustomCategory = "Documentation";
                jumpTask.Title = "Read the readme.txt";
                jumpTask.ApplicationPath = @"c:\windows\notepad.exe";
                jumpTask.IconResourcePath = @"c:\windows\notepad.exe";
                jumpTask.Arguments = path;
                jumpList.JumpItems.Add(jumpTask);
            }
            
            // Обновление списка часто используемых элементов
            jumpList.Apply();
        }

На рисунке показан измененный список часто используемых элементов, который включает новый добавленный объект JumpTask:

JumpTask
Пройди тесты
Лучший чат для C# программистов