天天看點

wpf如何實作自定義視窗自由拖動

我是一個新手,也是第一次寫部落格,有什麼不好的還請大家指教,隻為記錄一下自己學習的東西

話不多說了。

今天碰到一個Wpf的視窗讓滑鼠按下可以拖動,本來想想很簡單的,調用一下this.DragMove()就可以了,可是後來發現自己的視窗還是不能動,想了半天也沒有發現問題,後來跟了一下,發現視窗移動的事件就沒有觸發。

之後看看前台的代碼發現了一個問題,就是滑鼠點選的時候自己接收的地方沒有定義好。就是Border标簽裡面的地方自己放在第一行之中了,可是大小卻與第一行配置設定的不一樣,是以就出現偶時能拖,有時不能拖的現像,後畫把它放在Grid這個标簽裡面就好了。

下面是修改前的前台代碼:

<Window x:Class="Demo_01.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"  WindowStartupLocation="CenterScreen" WindowStyle="None" Background="LightBlue">
    <StackPanel >
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="40"></RowDefinition>
                <RowDefinition Height="*"></RowDefinition>
            </Grid.RowDefinitions>
            <!--<Border x:Name="Border_Title" Grid.Row="0" Height="40" Width="525" Background="LightBlue" BorderThickness="0,0,0,1" BorderBrush="Black"></Border>-->
        </Grid>
        <Border x:Name="Border_Title" Grid.Row="0" Height="40" Width="525" Background="LightBlue" BorderThickness="0,0,0,1" BorderBrush="Black"></Border>
    </StackPanel>
</Window>
           

修改後的就是注釋的地方。

這是背景的代碼:

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.Border_Title.MouseDown += new MouseButtonEventHandler(Border_Title_MouseDown);
        }

        void Border_Title_MouseDown(object sender, MouseButtonEventArgs e)
        {
            this.DragMove();
        }
    }
}
           

我是一個新手,大家要是還有其它的辦法,可以告訴我一下,謝謝了。

繼續閱讀