首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

WPF 進階案例(四):模擬 Windows 7 任務列縮圖預覽效果

     編輯:關於.NET

本案例完整複刻 Windows 7 任務列行為:雙擊桌面捷徑開啟子視窗、任務列自動生成圖標、滑鼠懸停顯示即時縮圖預覽、點擊圖標切換視窗最大化/最小化。

任務列模擬效果

原始碼下載:StatusBar.rar

核心實作技術

1. VisualBrush 實現即時縮圖

將子視窗 (Window) 直接作為 VisualBrush 的 Visual 來源,填充 Rectangle,即可獲得即時縮圖:


Rectangle emptyRectangle = new Rectangle
{
    Width = 250,
    Height = 130,
    Fill = new VisualBrush { Visual = childWindow },
    Margin = new Thickness(2)
};

2. 雙層 Border 打造圓角倒影外觀


// 內層:縮圖圓角
Border visualBorder = new Border
{
    BorderBrush = Brushes.Transparent,
    BorderThickness = new Thickness(1),
    CornerRadius = new CornerRadius(10),
    Margin = new Thickness(10),
    Height = 150,
    Width = 270,
    Child = emptyRectangle,
    Background = FindResource("transparentColor") as LinearGradientBrush
};

// 外層:背景圓角
Border host = new Border
{
    BorderBrush = Brushes.Transparent,
    BorderThickness = new Thickness(1),
    CornerRadius = new CornerRadius(8),
    Child = visualBorder,
    Background = FindResource("thumbnailBackground") as ImageBrush
};

3. ToolTip 承載縮圖 Popup

利用 ToolTip 的浮動特性顯示縮圖,設定極短延遲 (InitialShowDelay=20ms) 實現即時響應:


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
};
ToolTipService.SetInitialShowDelay(taskbarButton, 20);
taskbarButton.ToolTip = visualToolTip;

4. 事件處理:視窗關閉移除圖標、點擊切換狀態


// 子視窗關閉時移除任務列圖標
childWindow.Closed += (s, e) => statusBar.Children.Remove(hostBorder);

// 點擊任務列圖標:最小化/還原切換
taskbarButton.MouseLeftButtonDown += (s, e) =>
{
    if (e.ClickCount == 1)
    {
        if (childWindow.WindowState == WindowState.Minimized)
        {
            childWindow.WindowState = WindowState.Normal;
            childWindow.Topmost = true;
        }
        else
            childWindow.WindowState = WindowState.Minimized;
    }
};

關鍵實作細節

向任務列 StackPanel 添加圖標時,必須採用由上至下的添加順序(Children.Insert(0, ...) 或依序 Add),避免 WPF 視覺樹重複渲染邏輯導致效能下降。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved