Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF拇指使用WindowsState拖动和移动。最大化_C#_Wpf - Fatal编程技术网

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;
    }
}