Поделиться через


TaskbarItemInfo Класс

Определение

Представляет сведения о отображении эскиза панели задач.

public ref class TaskbarItemInfo sealed : System::Windows::Freezable
public sealed class TaskbarItemInfo : System.Windows.Freezable
type TaskbarItemInfo = class
    inherit Freezable
Public NotInheritable Class TaskbarItemInfo
Inherits Freezable
Наследование

Примеры

В следующем примере показано, как создать разметку TaskbarItemInfo . Содержит TaskbarItemInfo коллекцию ThumbButtonInfo объектов, которые предоставляют доступ к командам Play и Stop из элемента панели задач.

<Window.TaskbarItemInfo>
    <TaskbarItemInfo x:Name="taskBarItemInfo1" 
                     Overlay="{StaticResource ResourceKey=StopImage}"
                     ThumbnailClipMargin="80,0,80,140"
                     Description="Taskbar Item Info Sample">
        <TaskbarItemInfo.ThumbButtonInfos>
            <ThumbButtonInfoCollection>
                <ThumbButtonInfo
                    DismissWhenClicked="False"
                    Command="MediaCommands.Play"
                    CommandTarget="{Binding ElementName=btnPlay}"
                    Description="Play"
                    ImageSource="{StaticResource ResourceKey=PlayImage}"/>
                <ThumbButtonInfo
                    DismissWhenClicked="True"
                    Command="MediaCommands.Stop"
                    CommandTarget="{Binding ElementName=btnStop}"
                    Description="Stop"
                    ImageSource="{StaticResource ResourceKey=StopImage}"/>
            </ThumbButtonInfoCollection>
        </TaskbarItemInfo.ThumbButtonInfos>
    </TaskbarItemInfo>
</Window.TaskbarItemInfo>

В приведенном ниже разметке и коде показан предыдущий пример в полном контексте. Приложение использует для подсчета BackgroundWorker от 0 до 100 и отображает его ход выполнения в пользовательском интерфейсе. Задачу можно запустить и остановить в предварительной версии панели задач. Ход выполнения отображается на кнопке панели задач.

<Window x:Class="Shell_TaskbarItemSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="300" Width="300">
    <Window.Resources>
        <DrawingImage x:Key="PlayImage">
            <DrawingImage.Drawing>
                <DrawingGroup>
                    <DrawingGroup.Children>
                        <GeometryDrawing Brush="Green" Geometry="F1 M 50,25L 0,0L 0,50L 50,25 Z "/>
                    </DrawingGroup.Children>
                </DrawingGroup>
            </DrawingImage.Drawing>
        </DrawingImage>
        <DrawingImage x:Key="StopImage">
            <DrawingImage.Drawing>
                <DrawingGroup>
                    <DrawingGroup.Children>
                        <GeometryDrawing Brush="Gray" Geometry="F1 M 0,0L 50,0L 50,50L 0,50L 0,0 Z "/>
                    </DrawingGroup.Children>
                </DrawingGroup>
            </DrawingImage.Drawing>
        </DrawingImage>
    </Window.Resources>
    <Window.CommandBindings>
        <CommandBinding Command="MediaCommands.Play"
                  Executed="StartCommand_Executed"
                  CanExecute="StartCommand_CanExecute"/>
        <CommandBinding Command="MediaCommands.Stop"
                  Executed="StopCommand_Executed"
                  CanExecute="StopCommand_CanExecute"/>
    </Window.CommandBindings>
    <Window.TaskbarItemInfo>
        <TaskbarItemInfo x:Name="taskBarItemInfo1" 
                         Overlay="{StaticResource ResourceKey=StopImage}"
                         ThumbnailClipMargin="80,0,80,140"
                         Description="Taskbar Item Info Sample">
            <TaskbarItemInfo.ThumbButtonInfos>
                <ThumbButtonInfoCollection>
                    <ThumbButtonInfo
                        DismissWhenClicked="False"
                        Command="MediaCommands.Play"
                        CommandTarget="{Binding ElementName=btnPlay}"
                        Description="Play"
                        ImageSource="{StaticResource ResourceKey=PlayImage}"/>
                    <ThumbButtonInfo
                        DismissWhenClicked="True"
                        Command="MediaCommands.Stop"
                        CommandTarget="{Binding ElementName=btnStop}"
                        Description="Stop"
                        ImageSource="{StaticResource ResourceKey=StopImage}"/>
                </ThumbButtonInfoCollection>
            </TaskbarItemInfo.ThumbButtonInfos>
        </TaskbarItemInfo>
    </Window.TaskbarItemInfo>

    <Grid>
        <StackPanel>
            <TextBlock x:Name="tbCount" FontSize="72" HorizontalAlignment="Center"/>
            <StackPanel Orientation="Horizontal">
                <Button x:Name="btnPlay" Content="Play" Command="MediaCommands.Play" />
                <Button x:Name="btnStop" Content="Stop" Command="MediaCommands.Stop" />
            </StackPanel>    
        </StackPanel>
    </Grid>
</Window>
// MainWindow.xaml.cs
using System.ComponentModel;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Shell;

namespace Shell_TaskbarItemSample
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private BackgroundWorker _backgroundWorker = new BackgroundWorker();

        public MainWindow()
        {
            InitializeComponent();

            // Set up the BackgroundWorker.
            this._backgroundWorker.WorkerReportsProgress = true;
            this._backgroundWorker.WorkerSupportsCancellation = true;
            this._backgroundWorker.DoWork += new DoWorkEventHandler(bw_DoWork);
            this._backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
            this._backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
        }

        private void StartCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = true;
            e.Handled = true;
        }
        
        private void StartCommand_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            if (!this._backgroundWorker.IsBusy)
            {
                this._backgroundWorker.RunWorkerAsync();
                // When the task is started, change the ProgressState and Overlay
                // of the taskbar item to indicate an active task.
                this.taskBarItemInfo1.ProgressState = TaskbarItemProgressState.Normal;
                this.taskBarItemInfo1.Overlay = (DrawingImage)this.FindResource("PlayImage");
            }
            e.Handled = true;
        }

        private void StopCommand_CanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = this._backgroundWorker.WorkerSupportsCancellation;
            e.Handled = true;
        }

        private void StopCommand_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            this._backgroundWorker.CancelAsync();
            e.Handled = true;
        }

        void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            // When the task ends, change the ProgressState and Overlay
            // of the taskbar item to indicate a stopped task.
            if (e.Cancelled)
            {
                // The task was stopped by the user. Show the progress indicator
                // in the paused state.
                this.taskBarItemInfo1.ProgressState = TaskbarItemProgressState.Paused;
            }
            else if (e.Error != null)
            {
                // The task ended with an error. Show the progress indicator
                // in the error state.
                this.taskBarItemInfo1.ProgressState = TaskbarItemProgressState.Error;
            }
            else
            {
                // The task completed normally. Remove the progress indicator.
                this.taskBarItemInfo1.ProgressState = TaskbarItemProgressState.None;
            }
            // In all cases, show the 'Stopped' overlay.
            this.taskBarItemInfo1.Overlay = (DrawingImage)this.FindResource("StopImage");
        }

        void bw_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            this.tbCount.Text = e.ProgressPercentage.ToString();
            // Update the value of the task bar progress indicator.
            this.taskBarItemInfo1.ProgressValue = (double)e.ProgressPercentage / 100;
        }

        void bw_DoWork(object sender, DoWorkEventArgs e)
        {        
            BackgroundWorker _worker = sender as BackgroundWorker;
            if (_worker != null)
            {
                for (int i = 1; i <= 100; i++)
                {
                    if (_worker.CancellationPending)
                    {
                        e.Cancel = true;
                        break;
                    }
                    else
                    {
                        System.Threading.Thread.Sleep(25);
                        _worker.ReportProgress(i);
                    }
                }
            }
        }
    }   
}
' MainWindow.xaml.vb
Imports System.ComponentModel
Imports System.Windows.Shell

Class MainWindow
    Private _backgroundWorker As New BackgroundWorker

    Public Sub New()
        InitializeComponent()

        ' Set up the BackgroundWorker
        Me._backgroundWorker.WorkerReportsProgress = True
        Me._backgroundWorker.WorkerSupportsCancellation = True
        AddHandler Me._backgroundWorker.DoWork, AddressOf bw_DoWork
        AddHandler Me._backgroundWorker.ProgressChanged, AddressOf bw_ProgressChanged
        AddHandler Me._backgroundWorker.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted
    End Sub

    Private Sub StartCommand_CanExecute(ByVal sender As System.Object, ByVal e As System.Windows.Input.CanExecuteRoutedEventArgs)
        e.CanExecute = True
        e.Handled = True
    End Sub

    Private Sub StartCommand_Executed(ByVal sender As System.Object, ByVal e As System.Windows.Input.ExecutedRoutedEventArgs)
        If Me._backgroundWorker.IsBusy = False Then
            Me._backgroundWorker.RunWorkerAsync()
            ' When the task is started, change the ProgressState and Overlay
            ' of the taskbar item to indicate an active task.
            Me.taskBarItemInfo1.ProgressState = Shell.TaskbarItemProgressState.Normal
            Me.taskBarItemInfo1.Overlay = Me.FindResource("PlayImage")
        End If
        e.Handled = True
    End Sub

    Private Sub StopCommand_CanExecute(ByVal sender As System.Object, ByVal e As System.Windows.Input.CanExecuteRoutedEventArgs)
        e.CanExecute = Me._backgroundWorker.WorkerSupportsCancellation
        e.Handled = True
    End Sub

    Private Sub StopCommand_Executed(ByVal sender As System.Object, ByVal e As System.Windows.Input.ExecutedRoutedEventArgs)
        Me._backgroundWorker.CancelAsync()
        e.Handled = True
    End Sub

    Private Sub bw_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
        ' When the task ends, change the ProgressState and Overlay
        ' of the taskbar item to indicate a stopped task.
        If e.Cancelled = True Then
            ' The task was stopped by the user. Show the progress indicator
            ' in the paused state.
            Me.taskBarItemInfo1.ProgressState = TaskbarItemProgressState.Paused
        ElseIf e.Error IsNot Nothing Then
            ' The task ended with an error. Show the progress indicator
            ' in the error state.
            Me.taskBarItemInfo1.ProgressState = TaskbarItemProgressState.Error
        Else
            ' The task completed normally. Remove the progress indicator.
            Me.taskBarItemInfo1.ProgressState = TaskbarItemProgressState.None
            ' In all cases, show the 'Stopped' overlay.
            Me.taskBarItemInfo1.Overlay = Me.FindResource("StopImage")
        End If
    End Sub

    Private Sub bw_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs)
        Me.tbCount.Text = e.ProgressPercentage.ToString()
        ' Update the value of the task bar progress indicator.
        Me.taskBarItemInfo1.ProgressValue = e.ProgressPercentage / 100
    End Sub

    Private Sub bw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
        Dim _worker As BackgroundWorker = CType(sender, BackgroundWorker)
        If _worker IsNot Nothing Then
            For i As Integer = 1 To 100 Step 1
                If _worker.CancellationPending = True Then
                    e.Cancel = True
                    Return
                Else
                    System.Threading.Thread.Sleep(25)
                    _worker.ReportProgress(i)
                End If
            Next
        End If
    End Sub
End Class

Комментарии

Класс TaskbarItemInfo предоставляет управляемую оболочку для функциональных возможностей панели задач Windows 7. Дополнительные сведения о оболочке Windows и собственных API панели задач см. в разделе "Расширения панели задач". TaskbarItemInfo предоставляется в качестве Window.TaskbarItemInfo свойства зависимостей для объекта Window.

Панель задач Windows 7 предоставляет расширенные функциональные возможности, позволяющие использовать элемент панели задач для обмена данными о состоянии пользователя и предоставления общих задач, когда окно свернуто или скрыто. Функциональные возможности, предоставляемые классом TaskbarItemInfo , недоступны в версиях Windows до Windows 7. Приложения, использующие TaskbarItemInfo класс, по-прежнему могут работать в более ранних версиях Windows. Однако эти улучшения панели задач недоступны в более ранних версиях.

В Windows 7 некоторые функции панели задач могут быть недоступными в зависимости от параметров пользователя. Например, функция панели задач недоступна, если Windows Aero отключена или приложение запущено с повышенными разрешениями. Приложение должно предоставлять другие способы взаимодействия с пользователем, которые не зависят от расширенных функций панели задач в Windows 7.

Значки программы в области уведомлений, которая находится в правом углу панели задач, обычно используются для обмена данными о состоянии приложения пользователю. По умолчанию панель задач Windows 7 скрывает значки программы в области уведомлений. Однако можно задать Overlay свойство, чтобы добавить изображение на кнопку панели задач, чтобы сообщить о состоянии, например состояние в сети в приложении для обмена сообщениями. Изображение наложения позволяет пользователям видеть состояние приложения, даже если значок программы не отображается в области уведомлений. Вы также можете отобразить ход выполнения задач на панели задач, задав ProgressState и ProgressValue свойства.

На панели задач Windows 7 отображается эскиз приложения при перемещении указателя мыши на кнопку панели задач. По умолчанию отображается все окно приложения. Для отображения в эскизе можно указать определенную часть окна, задав ThumbnailClipMargin свойство. Вы также можете указать, Description что отображается в подсказке над эскизом панели задач. Подсказка отображается даже в том случае, если эскиз не отображается из-за параметров пользователя.

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

На следующем рисунке показаны расширенные возможности панели задач Windows 7.

Пример сведений Расширенные функции панели задач Windows

Конструкторы

Имя Описание
TaskbarItemInfo()

Инициализирует новый экземпляр класса TaskbarItemInfo.

Поля

Имя Описание
DescriptionProperty

Определяет Description свойство зависимостей.

OverlayProperty

Определяет Overlay свойство зависимостей.

ProgressStateProperty

Определяет ProgressState свойство зависимостей.

ProgressValueProperty

Определяет ProgressValue свойство зависимостей.

ThumbButtonInfosProperty

Определяет ThumbButtonInfos свойство зависимостей.

ThumbnailClipMarginProperty

Определяет ThumbnailClipMargin свойство зависимостей.

Свойства

Имя Описание
CanFreeze

Возвращает значение, указывающее, можно ли изменить объект.

(Унаследовано от Freezable)
DependencyObjectType

Возвращает объект DependencyObjectType , который упаковывает тип СРЕДЫ CLR этого экземпляра.

(Унаследовано от DependencyObject)
Description

Возвращает или задает текст подсказки элемента панели задач.

Dispatcher

Dispatcher Возвращает это DispatcherObject значение, с которым связано.

(Унаследовано от DispatcherObject)
IsFrozen

Возвращает значение, указывающее, является ли объект изменяемым в настоящее время.

(Унаследовано от Freezable)
IsSealed

Возвращает значение, указывающее, запечатан ли этот экземпляр (только для чтения).

(Унаследовано от DependencyObject)
Overlay

Возвращает или задает изображение, отображаемое на значке программы на панели задач.

ProgressState

Возвращает или задает значение, указывающее, как индикатор хода выполнения отображается на кнопке панели задач.

ProgressValue

Возвращает или задает значение, указывающее полноту индикатора хода выполнения на кнопке панели задач.

ThumbButtonInfos

Возвращает или задает коллекцию ThumbButtonInfo объектов, связанных с ним Window.

ThumbnailClipMargin

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

Методы

Имя Описание
CheckAccess()

Определяет, имеет ли вызывающий поток доступ к этому DispatcherObject.

(Унаследовано от DispatcherObject)
ClearValue(DependencyProperty)

Очищает локальное значение свойства. Свойство для очистки указывается идентификатором DependencyProperty .

(Унаследовано от DependencyObject)
ClearValue(DependencyPropertyKey)

Очищает локальное значение свойства только для чтения. Свойство, которое необходимо очистить, задается параметром DependencyPropertyKey.

(Унаследовано от DependencyObject)
Clone()

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

(Унаследовано от Freezable)
CloneCore(Freezable)

Делает экземпляр клоном (глубокой копией) указанных Freezable значений свойств с использованием базовых (не анимированных) значений свойств.

(Унаследовано от Freezable)
CloneCurrentValue()

Создает модификируемую клон (глубокую копию) текущего Freezable значения.

(Унаследовано от Freezable)
CloneCurrentValueCore(Freezable)

Делает экземпляр модификируемым клоном (глубокой копией) указанного Freezable с использованием текущих значений свойств.

(Унаследовано от Freezable)
CoerceValue(DependencyProperty)

Принуждает значение указанного свойства зависимостей. Это достигается путем вызова любой CoerceValueCallback функции, указанной в метаданных свойств для свойства зависимостей, так как он существует при вызове DependencyObject.

(Унаследовано от DependencyObject)
CreateInstance()

Инициализирует новый экземпляр класса Freezable.

(Унаследовано от Freezable)
CreateInstanceCore()

При реализации в производном классе создает новый экземпляр производного Freezable класса.

(Унаследовано от Freezable)
Equals(Object)

Определяет, эквивалентен ли предоставленный DependencyObject объект текущему DependencyObject.

(Унаследовано от DependencyObject)
Freeze()

Делает текущий объект неизменяемым и задает для свойства значение IsFrozentrue.

(Унаследовано от Freezable)
FreezeCore(Boolean)

Freezable Делает объект неизменимым или проверяет, может ли он быть изменен.

(Унаследовано от Freezable)
GetAsFrozen()

Создает замороженную копию базовых Freezable(не анимированных) значений свойств. Так как копия заморожена, все замороженные вложенные объекты копируются по ссылке.

(Унаследовано от Freezable)
GetAsFrozenCore(Freezable)

Делает экземпляр замороженным клоном указанных Freezable значений свойств (не анимированных).

(Унаследовано от Freezable)
GetCurrentValueAsFrozen()

Создает замороженную копию с использованием текущих значений Freezable свойств. Так как копия заморожена, все замороженные вложенные объекты копируются по ссылке.

(Унаследовано от Freezable)
GetCurrentValueAsFrozenCore(Freezable)

Делает текущий экземпляр замороженным клоном указанного Freezable. Если объект имеет анимированные свойства зависимостей, их текущие анимированные значения копируются.

(Унаследовано от Freezable)
GetHashCode()

Получает хэш-код для этого DependencyObject.

(Унаследовано от DependencyObject)
GetLocalValueEnumerator()

Создает специализированный перечислитель для определения того, какие свойства зависимостей имеют локальные значения для этого DependencyObject.

(Унаследовано от DependencyObject)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
GetValue(DependencyProperty)

Возвращает текущее эффективное значение свойства зависимостей для этого экземпляра DependencyObject.

(Унаследовано от DependencyObject)
InvalidateProperty(DependencyProperty)

Повторно вычисляет эффективное значение для указанного свойства зависимостей.

(Унаследовано от DependencyObject)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
OnChanged()

Вызывается при изменении текущего Freezable объекта.

(Унаследовано от Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject, DependencyProperty)

Этот член поддерживает инфраструктуру Windows Presentation Foundation (WPF) и не предназначен для использования непосредственно из кода.

(Унаследовано от Freezable)
OnFreezablePropertyChanged(DependencyObject, DependencyObject)

Убедитесь, что для элемента данных, который только что был установлен, установлены DependencyObjectType соответствующие указатели контекста.

(Унаследовано от Freezable)
OnPropertyChanged(DependencyPropertyChangedEventArgs)

Переопределяет DependencyObject реализацию OnPropertyChanged(DependencyPropertyChangedEventArgs) для вызова всех Changed обработчиков в ответ на изменение свойства зависимостей типа Freezable.

(Унаследовано от Freezable)
ReadLocalValue(DependencyProperty)

Возвращает локальное значение свойства зависимостей, если оно существует.

(Унаследовано от DependencyObject)
ReadPreamble()

Гарантирует, что Freezable доступ к ней осуществляется из допустимого потока. Наследующие метод Freezable должны вызывать этот метод в начале любого API, который считывает элементы данных, которые не являются свойствами зависимостей.

(Унаследовано от Freezable)
SetCurrentValue(DependencyProperty, Object)

Задает значение свойства зависимостей, не изменяя его источник значений.

(Унаследовано от DependencyObject)
SetValue(DependencyProperty, Object)

Задает локальное значение свойства зависимостей, указанное его идентификатором свойства зависимостей.

(Унаследовано от DependencyObject)
SetValue(DependencyPropertyKey, Object)

Задает локальное значение свойства зависимостей только для чтения, указанное DependencyPropertyKey идентификатором свойства зависимости.

(Унаследовано от DependencyObject)
ShouldSerializeProperty(DependencyProperty)

Возвращает значение, указывающее, должны ли процессы сериализации сериализовать значение для указанного свойства зависимостей.

(Унаследовано от DependencyObject)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
VerifyAccess()

Принудительно применяет, что вызывающий поток имеет доступ к этому DispatcherObject.

(Унаследовано от DispatcherObject)
WritePostscript()

Changed Вызывает событие для Freezable метода и вызывает его OnChanged() метод. Классы, производные от Freezable этого метода, должны вызываться в конце любого API, который изменяет элементы класса, которые не хранятся в качестве свойств зависимостей.

(Унаследовано от Freezable)
WritePreamble()

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

(Унаследовано от Freezable)

События

Имя Описание
Changed

Происходит при Freezable изменении объекта или объекта, содержащего его.

(Унаследовано от Freezable)

Применяется к