Я создаю собственное окно WPF с помощью WindowStyle = None, AllowsTransparency = True и ResizeMode = CanMinimize.Панель задач окна WPF
У меня есть два события (которые я создал для понимания событий в WPF), PreviewMouseDoubleClick и PreviewMouseMove.
Вот XAML:
<Style TargetType="{x:Type local:CustomWindow}">
<Setter Property="WindowStyle" Value="None"/>
<Setter Property="AllowsTransparency" Value="True"/>
<Setter Property="ResizeMode" Value="CanMinimize"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomWindow}">
<Border BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" BorderThickness="{TemplateBinding BorderThickness}">
<Grid Background="{TemplateBinding GridBackground}">
<ContentPresenter/>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Вот код Сзади:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
namespace CustomWindows
{
public class CustomWindow : Window
{
/* Dependency properties */
public Brush GridBackground
{
get { return (Brush)GetValue(GridBackgroundProperty); }
set { SetValue(GridBackgroundProperty, value); }
}
// Using a DependencyProperty as the backing store for GridBackground. This enables animation, styling, binding, etc...
public static readonly DependencyProperty GridBackgroundProperty =
DependencyProperty.Register("GridBackground", typeof(Brush), typeof(Window), new PropertyMetadata(null));
/* Constructors */
static CustomWindow()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomWindow), new FrameworkPropertyMetadata(typeof(CustomWindow)));
}
/* overriders */
public override void OnApplyTemplate()
{
PreviewMouseDoubleClick += (s, e) =>
{
WindowState = (WindowState == WindowState.Maximized) ? WindowState.Normal : WindowState.Maximized;
};
PreviewMouseMove += (s, e) =>
{
if(Mouse.LeftButton == MouseButtonState.Pressed)
{
DragMove();
}
};
base.OnApplyTemplate();
}
}
}
На Перетаскивание это окно, оно охватывает панель задач. Я не уверен, почему. Вот ссылка на изображении, которое описывает поведение я говорю: http://imgur.com/ba3ADoLIssue Description Image
Также на восстановление окна, если указатель мыши находится вне границ окна, фокус еще не дан Desktop , Если мышь перемещается вручную немного позже. Основное внимание уделяется Desktop. Такое поведение кажется мне странным. Любая помощь будет оценена.
Спасибо заранее.