這個程式模彷了Windows7的案頭工作列,當在案頭上雙擊某個捷徑時,將開啟一個新的子介面,並且在工作列裡建立一個連結到此介面的工作列表徵圖,將滑鼠移動到工作列上的表徵圖時,將Popup出介面的即時映像縮圖,單擊工作列表徵圖時,可讓介面最大化或最小化,介面如下所示,源碼從這裡下載
做這個工作列介面縮圖時,使用VisualBrush將子介面的即時映像填充到Rectangle
1 Rectangle emptyRectangle = new Rectangle
2 {
3 Width = 250D,
4 Height = 130D,
5 Fill = new VisualBrush { Visual = child },
6 Margin = new Thickness(2)
7 };
又分別使用了兩個Border來模彷Windows7工作列縮圖的圓角
使用圓角
//給工作列的Popup介面縮圖應用圓角
Border visualBorder = new Border
{
BorderBrush = Brushes.Transparent,
BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(10),
Margin = new Thickness(10),
Height = 150D,
Width = 270D,
Child = emptyRectangle,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Background = this.FindResource("transparentColor") as LinearGradientBrush
};
//對工作列的Popup介面縮圖的背景應用圓角
Border host = new Border
{
BorderBrush = Brushes.Transparent,
BorderThickness = new Thickness(1),
CornerRadius = new CornerRadius(8),
Child = visualBorder,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Background = this.FindResource("thumbnailBackground") as ImageBrush
};複製代碼
定義一個ToolTip用來宿主介面的縮圖
ToolTip
//添加一ToolTip,用來宿主子介面的宿略圖
ToolTip visualToolTip = new ToolTip
{
Content = host,
Background = Brushes.Transparent,
BorderBrush = Brushes.Transparent,
Placement = PlacementMode.Top,
HorizontalContentAlignment = HorizontalAlignment.Center,
VerticalContentAlignment = VerticalAlignment.Center,
HasDropShadow = false,
VerticalOffset=3
};
//設計ToolTip的Popup延遲時間為20ms
ToolTipService.SetInitialShowDelay(thumbnail, 20);
thumbnail.ToolTip = visualToolTip;複製代碼
定義事件,子介面關閉時,從工作列中移除此介面在工作列上的表徵圖,當在工作列表徵圖上單擊滑鼠時,實現介面的最大化或者最小化
定義事件
//當開啟的子介面關閉時需從工作列移除此介面在工作列上的表徵圖
child.Closed += delegate
{
this.statusBar.Children.Remove(hostBorder);
};
//在工作列上單擊任務表徵圖時,最大化或者最小化子介面
hostBorder.MouseLeftButtonDown += delegate(object sender, MouseButtonEventArgs e)
{
if (e.ClickCount == 1)
{
if (child.WindowState == WindowState.Minimized)
{
//正常顯示子介面
child.WindowState = WindowState.Normal;
child.Topmost = true;
}
else
//最小化子介面
child.WindowState = WindowState.Minimized;
}
};複製代碼
這個程式實現起來很簡單,但需要注意的是往工作列裡添加子介面工作列表徵圖時,應該以從上往下的順序添加,這樣可以避免重複Rendering
邏輯樹狀結構的子葉點,