C# WPF拇指使用WindowsState拖动和移动。最大化
我有一个带有C# WPF拇指使用WindowsState拖动和移动。最大化,c#,wpf,C#,Wpf,我有一个带有WindowState=WindowState.Maximized的自定义窗口,其中边框和拇指位于边框内,当WindowState=WindowState.Maximized时,我似乎无法将自定义窗口拖动并移动到其他屏幕 Xaml: 我还重写了MouseLeftButtonDown方法,并在内部使用了DragMove(),但没有成功。我还尝试订阅thumb的MouseLeftButtonDown并在那里编写DragMove(),但没有成功。默认情况下,最大化的窗口无法移动,因此左侧和
WindowState=WindowState.Maximized
的自定义窗口,其中边框和拇指位于边框内,当WindowState=WindowState.Maximized
时,我似乎无法将自定义窗口拖动并移动到其他屏幕
Xaml:
我还重写了
MouseLeftButtonDown
方法,并在内部使用了DragMove()
,但没有成功。我还尝试订阅thumb的MouseLeftButtonDown
并在那里编写DragMove()
,但没有成功。默认情况下,最大化的窗口无法移动,因此左侧
和顶部
没有效果。一个选项是注册到Thumb.DragStarted
事件,并检查窗口是否最大化。如果是,您可以设置WindowState.Normal
,并依次更新左侧
和顶部
属性
在代码中,这看起来有点像这样:
private void Thumb\u ondragstartedeventargs e(对象发送方)
{
//如果窗口未最大化,则不执行任何操作
如果(WindowsState!=WindowsState.Maximized)
返回;
//将窗口状态设置为正常
WindowState=WindowState.Normal;
//在这里,您必须确定初始左侧和顶部值
//对于具有WindowsState normal的窗口
//我会使用类似于本机“GetCursorPos”(在user32.dll中)的东西
//函数获取所有屏幕上的绝对鼠标点
var point=新的Win32Point();
GetCursorPos(参考点);
左=点-确定X值;
Top=点-确定值;
}
您可以了解有关GetCursorPos
的更多信息
但是,我强烈建议您使用.NET 4.5附带的类,Max在评论中也建议使用该类。您只需使用以下代码,即可获得所需的功能:
默认情况下,无法移动最大化的窗口,因此
左侧
和顶部
无效。一个选项是注册到Thumb.DragStarted
事件,并检查窗口是否最大化。如果是,您可以设置WindowState.Normal
,并依次更新左侧
和顶部
属性
在代码中,这看起来有点像这样:
private void Thumb\u ondragstartedeventargs e(对象发送方)
{
//如果窗口未最大化,则不执行任何操作
如果(WindowsState!=WindowsState.Maximized)
返回;
//将窗口状态设置为正常
WindowState=WindowState.Normal;
//在这里,您必须确定初始左侧和顶部值
//对于具有WindowsState normal的窗口
//我会使用类似于本机“GetCursorPos”(在user32.dll中)的东西
//函数获取所有屏幕上的绝对鼠标点
var point=新的Win32Point();
GetCursorPos(参考点);
左=点-确定X值;
Top=点-确定值;
}
您可以了解有关GetCursorPos
的更多信息
但是,我强烈建议您使用.NET 4.5附带的类,Max在评论中也建议使用该类。您只需使用以下代码,即可获得所需的功能:
默认情况下,无法移动最大化的窗口,因此
左侧
和顶部
无效。一个选项是注册到Thumb.DragStarted
事件,并检查窗口是否最大化。如果是,您可以设置WindowState.Normal
,并依次更新左侧
和顶部
属性
在代码中,这看起来有点像这样:
private void Thumb\u ondragstartedeventargs e(对象发送方)
{
//如果窗口未最大化,则不执行任何操作
如果(WindowsState!=WindowsState.Maximized)
返回;
//将窗口状态设置为正常
WindowState=WindowState.Normal;
//在这里,您必须确定初始左侧和顶部值
//对于具有WindowsState normal的窗口
//我会使用类似于本机“GetCursorPos”(在user32.dll中)的东西
//函数获取所有屏幕上的绝对鼠标点
var point=新的Win32Point();
GetCursorPos(参考点);
左=点-确定X值;
Top=点-确定值;
}
您可以了解有关GetCursorPos
的更多信息
但是,我强烈建议您使用.NET 4.5附带的类,Max在评论中也建议使用该类。您只需使用以下代码,即可获得所需的功能:
默认情况下,无法移动最大化的窗口,因此
左侧
和顶部
无效。一个选项是注册到Thumb.DragStarted
事件,并检查窗口是否最大化。如果是,您可以设置WindowState.Normal
,并依次更新左侧
和顶部
属性
在代码中,这看起来有点像这样:
private void Thumb\u ondragstartedeventargs e(对象发送方)
{
//如果窗口未最大化,则不执行任何操作
如果(WindowsState!=WindowsState.Maximized)
返回;
//将窗口状态设置为正常
WindowState=WindowState.Normal;
//在这里,您必须确定初始左侧和顶部值
//对于具有WindowsState normal的窗口
//我会使用类似于本机“GetCursorPos”(在user32.dll中)的东西
//函数获取所有屏幕上的绝对鼠标点
var point=新的Win32Point();
GetCursorPos(参考点);
左=点-确定X值;
Top=点-确定值;
}
您可以了解有关GetCursorPos
的更多信息
但是,我强烈建议您使用
<Window x:Class="WpfApplication3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Height="350"
Width="525"
WindowStyle="None">
<Border Name="headerBorder"
Width="Auto"
Height="50"
VerticalAlignment="Top"
CornerRadius="5,5,0,0"
DockPanel.Dock="Top"
Background="Red"
BorderThickness="1,1,1,1"
BorderBrush="Yellow">
<Grid x:Name="PART_Title">
<Thumb x:Name="headerThumb"
Opacity="0"
Background="{x:Null}"
Foreground="{x:Null}"
DragDelta="headerThumb_DragDelta"/>
</Grid>
</Border>
</Window>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
WindowState = System.Windows.WindowState.Maximized;
}
private void headerThumb_DragDelta(object sender, System.Windows.Controls.Primitives.DragDeltaEventArgs e)
{
Left = Left + e.HorizontalChange;
Top = Top + e.VerticalChange;
}
}