2013-05-17 14 views
5

Dodałem następujące parametry do mojego Window:C# WPF przenieść okno

WindowStyle="None" 
WindowStartupLocation="CenterScreen" 
AllowsTransparency="True" 
ResizeMode="NoResize" Background="Transparent" 

A teraz nie mogę przesunąć Window, więc dodałem następującą część kodu do mojego Window:

#region Window: Moving 

private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    DragMove(); 
} 

#endregion 

również muszę określić, że mój kod w moim WindowXAML jest następujący (Window wyglądać Polygon):

<Window Title="New Science" 
    Height="588" Width="760" MinHeight="360" MinWidth="360" 
    WindowStyle="None" WindowStartupLocation="CenterScreen" 
    AllowsTransparency="True" 
    ResizeMode="NoResize" Background="Transparent" 
    xmlns:my="clr-namespace:Bourlesque.Lib.Windows.Media;assembly=Bourlesque.Lib.Windows.Media"> 
    <Grid> 
     <my:UniPolygon DefaultRadiusIn="10" DefaultRadiusOut="10" Fill="#FF92C2F2" Name="m_tPlgOuter" Offset="0" Points="   0;26;;   10;19;10;;   10;0;;   265;0;20;;   290;20;20;;   -60,1;20;3;;   -60,1;5;10;;   -40,1;5;10;;   -40,1;20;2.5;;   -35,1;20;2.5;;   -35,1;5;10;;   -15,1;5;10;;   -15,1;20;3;;   0,1;20;;   0,1;0,1;;   0;0,1;;  " Stretch="None" Stroke="#FF535353" StrokeThickness="0.1" /> 
    </Grid> 
</Window> 

Chciałbym wiedzieć, co należy zrobić, aby Window zmienić jego położenie na przeciągnij mysz, a co dodać do zmiany rozmiaru okna pod warunkiem, że kontrole i inne rzeczy dodam zmieni rozmiar zbyt (mam Znalazłem ten kod, aby zmienić rozmiar i chciałbym wiedzieć, czy jest dobry here).

Odpowiedz

4

Znaleziono przykład: http://cloudstore.blogspot.com.br/2008/06/moving-wpf-window-with-windowstyle-of.html

W każdym razie, aby przesunąć okno w WinForms I wykorzystywanych w projekcie poniższy kod, może być przydatne, jeśli masz problemy:

private bool clicado = false; 
private Point lm = new Point(); 
void PnMouseDown(object sender, MouseEventArgs e) 
{ 
    clicado = true; 
    this.lm = MousePosition; 
} 

void PnMouseUp(object sender, MouseEventArgs e) 
{ 
    clicado = false; 
} 

void PnMouseMove(object sender, MouseEventArgs e) 
{ 
    if(clicado) 
    { 
     this.Left += (MousePosition.X - this.lm.X); 
     this.Top += (MousePosition.Y - this.lm.Y); 
     this.lm = MousePosition; 
    } 
} 
2

dobry kod odpowiedź, ale buggy. to sprawi, że twoja wyprawa stanie się poza kontrolą.

spróbować swoich Zmienić.

private bool clicado = false; 
private Point lm = new Point(); 
void PnMouseDown(object sender, System.Windows.Input.MouseEventArgs e) 
{ 
    clicado = true; 
    this.lm = System.Windows.Forms.Control.MousePosition; 
    this.lm.X = Convert.ToInt16(this.Left) - this.lm.X; 
    this.lm.Y = Convert.ToInt16(this.Top) - this.lm.Y; 
} 

void PnMouseUp(object sender, System.Windows.Input.MouseEventArgs e) 
{ 
    clicado = false; 
} 

void PnMouseMove(object sender, System.Windows.Input.MouseEventArgs e) 
{ 
    if (clicado) 
    { 
     this.Left = (System.Windows.Forms.Control.MousePosition.X + this.lm.X); 
     this.Top = (System.Windows.Forms.Control.MousePosition.Y + this.lm.Y); 
    } 
} 

będzie uzyskać poruszający się kij do kursora (/// /// ▽)

3

@Marcio nie ma Windows.Forms w WPF.

mam tej wersji do pracy (stały) z WPF,

private bool clicked = false; 
private Point lmAbs = new Point(); 
void PnMouseDown(object sender, System.Windows.Input.MouseEventArgs e) 
{ 
    clicked = true; 
    this.lmAbs = e.GetPosition(this); 
    this.lmAbs.Y = Convert.ToInt16(this.Top) + this.lmAbs.Y; 
    this.lmAbs.X = Convert.ToInt16(this.Left) + this.lmAbs.X; 
} 

void PnMouseUp(object sender, System.Windows.Input.MouseEventArgs e) 
{ 
    clicked = false; 
} 

void PnMouseMove(object sender, System.Windows.Input.MouseEventArgs e) 
{ 
    if (clicked) 
    { 
    Point MousePosition = e.GetPosition(this); 
    Point MousePositionAbs = new Point(); 
    MousePositionAbs.X = Convert.ToInt16(this.Left) + MousePosition.X; 
    MousePositionAbs.Y = Convert.ToInt16(this.Top) + MousePosition.Y; 
    this.Left = this.Left + (MousePositionAbs.X - this.lmAbs.X); 
    this.Top = this.Top + (MousePositionAbs.Y - this.lmAbs.Y); 
    this.lmAbs = MousePositionAbs; 
    } 
} 

poważaniem

Lex

0

Próbowałem innego rozwiązania i pracował (nie wiem, czy jest to najbardziej poprawne)

private void GridOfWindow_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     var move = sender as System.Windows.Controls.Grid; 
     var win = Window.GetWindow(move); 
     win.DragMove(); 
    } 

gdzie GridOfWindow to nazwa siatki

<Grid x:Name="GridOfWindow" MouseLeftButtonDown="GridOfWindow_MouseLeftButtonDown"> 
Powiązane problemy