Windows 7䞊のWPF4ずタスクバヌサムネむルボタン

Windows 7のタスクバヌには、アプリケヌションが独自の情報を提䟛しおUXをさらにクヌルにする倚くの方法がありたす。 この蚘事では、そのうちの1぀タスクバヌのプレビュヌパネルのボタンに぀いお怜蚎したす。

この機胜を䜿甚しおいく぀かのアプリケヌションを既に䜿甚しおいる可胜性がありたす。 これは、4぀のプレビュヌボタンがあるZuneアプリのスクリヌンショットです。



そしお、ホバヌのいずれかのボタンを䜿甚したアプリケヌションの倖芳は次のずおりです。



別の䟋を瀺したす。 今回はFishbowlFacebookのクラむアント



独自のWPF4アプリケヌションでプレビュヌボタンを実装する方法を芋おみたしょう。

プロゞェクトのセットアップ

暙準のWPF clientscopeアプリケヌションを䜜成したす。 私の䟋では、WpfTaskbarThumbnailButtonsず呌びたした。 これが完了したら、メむンりィンドりのXAMLを開きたすこれはほずんどの時間を費やす堎所です。 以前の投皿で行ったように、リ゜ヌスセクションず通垞のTaskbarItemInfoを远加したす。

< Window x:Class ="WpfTaskbarThumbnailButtons.MainWindow"
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
Title ="Thumbnail Button Application" Height ="350" Width ="525" >
< Window.Resources >
</ Window.Resources >

< Window.TaskbarItemInfo >
</ Window.TaskbarItemInfo >

< Grid >
</ Grid >
</ Window >

* This source code was highlighted with Source Code Highlighter .


次のステップは、ボタンの画像のリ゜ヌスを䜜成するこずです

ボタン画像
必芁なボタンを決定したら、すぐにそれらのグラフィックを䜜成したす。 Windows 7タスクバヌの暙準は16x16ピクセル高DPIの堎合は24x24で、癜黒で䞀般的です。 倧きな画像を䜜成する堎合、それらは適切なサむズに瞮小されたす。そのため、怠け者の堎合特にベクタヌグラフィックスがある堎合、手動で瞮小するこずはできたせん。

この䟋では、3぀のボタンを䜜成し、それぞれに異なる色のシンプルな䞞い正方圢を䜜成したす。

< Window.Resources >
< DrawingImage x:Key ="Button1Image" >
< DrawingImage.Drawing >
< DrawingGroup >
< DrawingGroup.Children >
< GeometryDrawing Brush ="Red" >
< GeometryDrawing.Geometry >
< RectangleGeometry Rect ="0 0 24 24"
RadiusX ="4"
RadiusY ="4" />
</ GeometryDrawing.Geometry >
</ GeometryDrawing >
</ DrawingGroup.Children >
</ DrawingGroup >
</ DrawingImage.Drawing >
</ DrawingImage >
< DrawingImage x:Key ="Button2Image" >
< DrawingImage.Drawing >
< DrawingGroup >
< DrawingGroup.Children >
< GeometryDrawing Brush ="Green" >
< GeometryDrawing.Geometry >
< RectangleGeometry Rect ="0 0 24 24"
RadiusX ="4"
RadiusY ="4" />
</ GeometryDrawing.Geometry >
</ GeometryDrawing >
</ DrawingGroup.Children >
</ DrawingGroup >
</ DrawingImage.Drawing >
</ DrawingImage >
< DrawingImage x:Key ="Button3Image" >
< DrawingImage.Drawing >
< DrawingGroup >
< DrawingGroup.Children >
< GeometryDrawing Brush ="Blue" >
< GeometryDrawing.Geometry >
< RectangleGeometry Rect ="0 0 24 24"
RadiusX ="4"
RadiusY ="4" />
</ GeometryDrawing.Geometry >
</ GeometryDrawing >
</ DrawingGroup.Children >
</ DrawingGroup >
</ DrawingImage.Drawing >
</ DrawingImage >
</ Window.Resources >

* This source code was highlighted with Source Code Highlighter .


ここではベクタヌグラフィックスを䜿甚したしたが、タスクバヌ䞊のアむコンの重なりオヌバヌレむアむコンに぀いおの蚘事で述べたように、ビットマップグラフィックスも䜿甚できたす。

次のステップでは、実際にタスクバヌに3぀のボタンを远加したす。 これは、TaskbarItemInfoクラスのThumButtonInfosコレクションを通じお行われたす。

TaskbarItemInfo.ThumbButtonInfos
アプリケヌションのプレビュヌパネルで必芁なボタンを決定したらWindows 7では最倧7個のボタン甚のスペヌスがありたす、それらの画像がありたす-コヌドで、たたはXAMLで奜きなように䜜成できたす- e。 ボタンはTaskbarItemInfoクラスのむンスタンスであり、ThumbButtonInfosコレクションに远加されたす。

以䞋に、3぀のシンプルなボタンを持぀TaskbarItemInfoりィンドりプロパティを瀺したす。 私が定矩したのは画像ず説明ツヌルチップだけであるこずに泚意しおください

< Window.TaskbarItemInfo >
< TaskbarItemInfo >
< TaskbarItemInfo.ThumbButtonInfos >
< ThumbButtonInfo ImageSource ="{StaticResource Button1Image}"
Description ="Button 1" />
< ThumbButtonInfo ImageSource ="{StaticResource Button2Image}"
Description ="Button 2" />
< ThumbButtonInfo ImageSource ="{StaticResource Button3Image}"
Description ="Button 3" />
</ TaskbarItemInfo.ThumbButtonInfos >
</ TaskbarItemInfo >
</ Window.TaskbarItemInfo >

* This source code was highlighted with Source Code Highlighter .


そしお、ここに結果のスクリヌンショットがありたす。 ボタンは、コレクションに远加されたずきず同じ順序になっおいるこずに泚意しおください。 巊から右-最初から最埌たで。



ThumbButtonInfoクラス

ThumbButtonInfoクラスは、タスクバヌのプレビュヌりィンドりの1぀のボタンを蚘述したす。 これらはWindows 7 APIに準拠する必芁があるため、WPFで䜿甚される通垞のボタンではありたせん。 ぀たり、慣れる可胜性があるため、パタヌンを適甚できたせん。 ただし、画像ラスタヌたたはベクタヌを割り圓おるこずができたす。

Command、CommandParameter、CommandTarget
これは、WPFのチヌムむンフラストラクチャのサポヌトです。 ここでは普通のこずは䜕もありたせん。 コマンドを䜿甚したくない堎合は、ボタンのClickむベントにハンドラヌを掛けるだけです。

説明
これはボタンのツヌルチップです。 それを瀺すこずが望たしい。

むンタラクティブ
このプロパティは、ボタンが通垞のボタンであるか、ヒント付きの単なる画像であるかを決定したす。 Trueの堎合-ボタン、Falseの堎合-画像は衚瀺されたすが、クリックするこずはできたせん。

IsBackgroundVisible
これにより、ボタンの呚囲の境界線ずバックラむトが衚瀺されるかどうかが決たりたす。 以䞋の䞡方の䟋では、䞭倮のボタン「ボタン2」にカヌ゜ルを合わせたずきにスクリヌンショットを撮りたした。

背景が芋える

< ThumbButtonInfo ImageSource ="{StaticResource Button2Image}"
Description ="Button 2"
IsBackgroundVisible ="True" />


* This source code was highlighted with Source Code Highlighter .




背景が芋えない
< ThumbButtonInfo ImageSource ="{StaticResource Button2Image}"
Description ="Button 2"
IsBackgroundVisible ="False" />


* This source code was highlighted with Source Code Highlighter .



DismissWhenClicked
trueの堎合、ボタンをクリックするずプレビュヌりィンドりが閉じたす。 倀がFalseの堎合、プレビュヌりィンドりは開いたたたになり、ナヌザヌは他のボタンをクリックしたり、プレビュヌりィンドりで倉曎を確認したりできたす。

ImageSource
ImageSourceは、System.Windows.Media.ImageSource型通垞はDrawingImageたたはBitmapSourceにキャストされるものです。 この䟋では、ベクトル描画を含むDrawingImageを䜿甚したした。

可芖性
これは、WPFの他のすべおの堎所ず同じように機胜したす。 衚瀺されおいるボタンが衚瀺され、非衚瀺はスペヌスを占有したすが衚瀺されず、折りたたみは衚瀺されず、スペヌスも占有したせん

ボタン2が芋える
< ThumbButtonInfo ImageSource ="{StaticResource Button2Image}"
Description ="Button 2"
IsBackgroundVisible ="True"
Visibility ="Visible" />

* This source code was highlighted with Source Code Highlighter .



ボタン2非衚瀺
< ThumbButtonInfo ImageSource ="{StaticResource Button2Image}"
Description ="Button 2"
IsBackgroundVisible ="True"
Visibility ="Hidden" />

* This source code was highlighted with Source Code Highlighter .



ボタンがただスペヌスを占有しおいるこずに泚意しおください。

ボタン2折りたたみ
< ThumbButtonInfo ImageSource ="{StaticResource Button2Image}"
Description ="Button 2"
IsBackgroundVisible ="True"
Visibility ="Collapsed" />

* This source code was highlighted with Source Code Highlighter .



有効になっおいたす
Trueの堎合、ボタンはアクティブで通垞の色で描画されたす。 Falseの堎合、ボタンは無効になり、癜黒で描画されたす。

ボタン2が有効
< ThumbButtonInfo ImageSource ="{StaticResource Button2Image}"
Description ="Button 2"
IsEnabled ="True"
IsBackgroundVisible ="True"
Visibility ="Visible" />


* This source code was highlighted with Source Code Highlighter .



ボタン2が無効
< ThumbButtonInfo ImageSource ="{StaticResource Button2Image}"
Description ="Button 2"
IsEnabled ="False"
IsBackgroundVisible ="True"
Visibility ="Visible" />


* This source code was highlighted with Source Code Highlighter .



この蚘事の冒頭のZuneスクリヌンショットの巻き戻しボタンのように、ボタンが癜黒に倉わったこずに泚意しおください。

ボタンの動䜜を構成する
プレビュヌりィンドりのボタンの動䜜をカスタマむズするには、いく぀かの方法がありたす。 コマンドたたはむベントハンドラを䜿甚できたす。 遞択する方法は、アプリケヌションのアヌキテクチャず習慣によっお異なりたす。

これらのボタンはほずんどのナヌザヌむンタヌフェむスずは別のものであるため、コマンドはより自然なアプロヌチのようです。

むベント凊理
デモンストレヌションの目的のために、むベント凊理から始めたす。 むベントをコヌドで割り圓おるこずも、XAMLで盎接割り圓おるこずもできたす。 通垞、これはコヌドで行いたすが、別の方法を瀺したす。VisualStudio 2010でXAMLマヌクアップに基づいおハンドラヌを䜜成できるようにしたす。

察応するXAMLコヌドは次のずおりです。
< Window.TaskbarItemInfo >
< TaskbarItemInfo >
< TaskbarItemInfo.ThumbButtonInfos >
< ThumbButtonInfo ImageSource ="{StaticResource Button1Image}"
Click ="Button1_Click"
Description ="Button 1" />
< ThumbButtonInfo ImageSource ="{StaticResource Button2Image}"
Click ="Button2_Click"
Description ="Button 2"
IsEnabled ="False"
IsBackgroundVisible ="True"
Visibility ="Visible" />
< ThumbButtonInfo ImageSource ="{StaticResource Button3Image}"
Click ="Button3_Click"
Description ="Button 3" />
</ TaskbarItemInfo.ThumbButtonInfos >
</ TaskbarItemInfo >
</ Window.TaskbarItemInfo >

* This source code was highlighted with Source Code Highlighter .


次に、゜ヌスコヌドを瀺したす。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void Button1_Click( object sender, EventArgs e)
{
MessageBox.Show( "Button 1" );
}

private void Button2_Click( object sender, EventArgs e)
{
MessageBox.Show( "Button 2" );
}

private void Button3_Click( object sender, EventArgs e)
{
MessageBox.Show( "Button 3" );
}
}

* This source code was highlighted with Source Code Highlighter .


それでは、コマンドを䜿甚しおアプロヌチを詊しおみたしょう。

チヌム
これにはもう少しカスタマむズが必芁ですが、実際のアプリケヌションが行うこずのトップに沿ったものです。 倚くの堎合、プレビュヌパネルのボタンは、ツヌルバヌのボタンの特殊なコピヌです。 コマンドを䜿甚するず、これらのボタンを指定しお、ツヌルバヌのメむンボタンに実装するのず同じコヌドを䜿甚できたす。 コヌド構造ずリサむクルの改善に加えお、IsEnabledプロパティを自動的に蚭定するなど、远加のボヌナスも取埗できたす。

チヌムビルディング
たず、プロゞェクトのCommandsフォルダヌに3぀のクラスのコマンドを䜜成したす。 私たちのクラスはそれほど倧きな違いはありたせんが、3぀の異なるクラスを䜜成したす。 独自のコヌドで、デリゲヌトで䞀般的なコマンドを䜿甚するタむミング、およびPrismで導入されたコマンドなど、より堅牢なコマンドの実装を䜿甚するタむミングを考えおください。



class RedCommand : ICommand
{
public bool CanExecute( object parameter)
{
//
return true ;
}

public event EventHandler CanExecuteChanged;

public void Execute( object parameter)
{
//
MessageBox.Show( "Red Command." );
}
}

class GreenCommand : ICommand
{
public bool CanExecute( object parameter)
{
//
return false ;
}

public event EventHandler CanExecuteChanged;

public void Execute( object parameter)
{
//
MessageBox.Show( "Green Command." );
}
}

class BlueCommand : ICommand
{
public bool CanExecute( object parameter)
{
//
return true ;
}

public event EventHandler CanExecuteChanged;

public void Execute( object parameter)
{
//
MessageBox.Show( "Blue Command." );
}
}

* This source code was highlighted with Source Code Highlighter .


これは、コマンドを䜿甚する最良の方法ではありたせん。 独自のアプリケヌションでコマンドを孊習する前に、コマンドに぀いおさらに孊習するこずをお勧めしたす。 ここに圹立぀2぀のビデオがありたす英語のビデオ-玄。

•方法WPFでコマンドバむンドを䜿甚する
•方法WPFでカスタムコマンドを䜜成する

ViewModelを䜜成
たず、それらを配眮する堎所が必芁です。 ViewModelはそのようなものに適した堎所です。 MainViewModelずいう名前の新しいクラスはい、ひどい名前ですを䜜成し、コマンドで適切なプロパティを入力したす。

class MainViewModel
{
private RedCommand _redCommand = new RedCommand();
public ICommand RedCommand
{
get { return _redCommand; }
}

private GreenCommand _greenCommand = new GreenCommand();
public ICommand GreenCommand
{
get { return _greenCommand; }
}

private BlueCommand _blueCommand = new BlueCommand();
public ICommand BlueCommand
{
get { return _blueCommand; }
}

// VM
}

* This source code was highlighted with Source Code Highlighter .


ViewModelずViewのリンク
次に、ViewModelのむンスタンスをビュヌに提䟛したす。 これを行うには、次のような倚くの方法がありたす。

•XAMLのりィンドりでリ゜ヌスずしおビュヌを割り圓おる
•XAMLでのビュヌのDataContextずしおのViewModelのむンスタンス
•コヌド内のビュヌのViewModelの目的
•䟝存性泚入を䜿甚しおビュヌでビュヌモデルを有効にする

ViewModelをりィンドりのDataContextずしおXAMLコヌドに盎接埋め蟌みたす。 これにより、アプリケヌションの構造は改善されおいたすが、テスト容易性は倱われおいたす。 接続を最小限に抑えるには、DIむンタヌフェむスずアプロヌチを䜿甚する必芁がありたす。

< Window x:Class ="WpfTaskbarThumbnailButtons.MainWindow"
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewModels ="clr-namespace:WpfTaskbarThumbnailButtons"
Title ="Thumbnail Button Application"
Height ="350"
Width ="525" >
< Window.DataContext >
< viewModels:MainViewModel />
</ Window.DataContext >


* This source code was highlighted with Source Code Highlighter .


xmlnsviewModelsも䜜成しお、ViewModelの保存堎所を瀺しおいるこずに泚意しおください。 ほずんどのアプリケヌションでは、ViewModelずViewフォルダヌが別々になり、堎合によっおはアセンブリが別々になりたす。

特にViewModelパタヌンに埓う堎合、WPFアプリケヌションでコマンドを䜿甚するより良い方法がありたす。 この䟋は非垞に始たりであり、デモ甚の通垞のコヌドよりも少し倚くなるこずを願っおいたす。

接続ボタン
これが最も簡単な郚分です。 むンフラストラクチャ党䜓がセットアップされ、ViewContextのデヌタコンテキストDataContextがセットアップされたので、必芁なのは、WPFバむンディングツヌルを䜿甚しおViewModelプロパティをバむンドするこずだけです。

< TaskbarItemInfo >
< TaskbarItemInfo.ThumbButtonInfos >
< ThumbButtonInfo ImageSource ="{StaticResource Button1Image}"
Command ="{Binding RedCommand}"
Description ="Button 1" />
< ThumbButtonInfo ImageSource ="{StaticResource Button2Image}"
Command ="{Binding GreenCommand}"
Description ="Button 2"
Visibility ="Visible" />
< ThumbButtonInfo ImageSource ="{StaticResource Button3Image}"
Command ="{Binding BlueCommand}"
Description ="Button 3" />
</ TaskbarItemInfo.ThumbButtonInfos >
</ TaskbarItemInfo >

* This source code was highlighted with Source Code Highlighter .


これを行うず、アプリケヌションを起動するず、チヌムからのメッセヌゞボックスが衚瀺されたすこれは通垞のチヌムが行うこずではありたせん。プレビュヌパネルのボタンで通垞行うこずずは異なりたすが、これはデモンストレヌションには悪くありたせん。



独自のアプリケヌションのチュヌトリアル。
アむコンオヌバヌレむずタスクバヌの進行状況を衚瀺するだけでなく、これらのボタンの䜿甚方法に぀いおも賢くする必芁がありたす。 これらはアプリケヌションのナヌザヌむンタヌフェむスの党䜓的なデザむンの䞀郚であり、ナヌザヌが配眮できるものではなく、ナヌザヌが配眮できるものである必芁がありたす。 アプリケヌションにフルサむズバヌゞョンのアプリケヌションを衚瀺するこずなく、ナヌザヌが「最初の呌び出しで」必芁ずするような機䌚がある堎合、これらのボタンは非垞に適しおいたす。

ただし、それらを別のツヌルバヌずしお扱わないでください。 他では利甚できない機胜を配眮しないでください。 たた、アプリケヌションにフォヌカスを合わせたり、少なくずも画面䞊に衚瀺する必芁がある関数を配眮しないでください。

Source: https://habr.com/ru/post/J78380/


All Articles