boss要求開發一個類似於360的懸浮窗,如下圖所示:
目前采用的是wpf做的客戶端,之前有個winform的項目,我參考了下,完成了wpf版的懸浮窗。
Height="52" Width="131" WindowStartupLocation="Manual" ShowInTaskbar="False" WindowStyle="None" WindowState="Normal"
MouseLeftButtonDown="Window_MouseLeftButtonDown" Closed="Window_Closed" SnapsToDevicePixels="True" ResizeMode="NoResize" AllowsTransparency="True"
以上窗口屬性:
定義了窗口大小,啟動位置(手動設置),窗口樣式(透明,去掉默認樣式),鼠標左鍵按下事件(實現拖動)
/// <summary> /// 窗口拖動 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Window_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { this.DragMove(); }
因為去掉了默認的窗體效果,失去了默認窗口拖動功能,所以又給加上。
void FloatWindow_Loaded(object sender, RoutedEventArgs e) { this.Topmost = true; this.Left = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width - 300; this.Top = 300; }
窗體在加載后,控制它顯示在屏幕最前端,以及位置。
private static readonly string TipToolAll = "pack://application:,,,/Skin/images/TipToolMainHover.png";
public FloatWindow() { InitializeComponent(); this.Background = new ImageBrush { ImageSource = new BitmapImage(new Uri(TipToolAll)) }; }
窗體初始化時,設置背景圖片。
小結:其實就是一個普通的窗體上面,設置了它的顯示位置以及顯示在屏幕的最上層等其它一些屬性而已。