2013-07-26 72 views

回答

0

您需要將IsOpen綁定到某物。就像您綁定PlacementTarget一樣。我強烈建議使用視圖模型,以便您可以綁定到數據。您可以通過設置窗口的DataContext屬性來完成此操作。你可以在你的視圖模型中有一個叫做IsValid的字段,它是一個bool,然後你的XAML看起來就像這樣。

<Popup Name="myPopup2" IsOpen="{Binding IsValid}" PlacementTarget="{Binding ElementName=mainCanvas}" Width="100" Height="100" Placement="Top" Margin="200"> 

如果執行INotifyPropertyChanged可以監控的東西如文本字段等視圖模型,並看到用戶已經進入了正確的信息等等。你也許可以做到一些其他的方式,但我會勸你使用視圖模型並將IsOpen綁定到它將是最好的解決方案。

+1

謝謝@Kenn但主要問題是不打開或關閉彈出窗口,主要問題是彈出屏幕! – Moslem7026

0

沒有對WPF框架沒有辦法把彈出了屏幕,但你可以通過調用「SetWindowPos」通過P強制彈出位置/調用:

#region P/Invoke imports & definitions 

     private const int HWND_TOPMOST = -1; 
     private const int HWND_NOTOPMOST = -2; 
     private const int HWND_BOTTOM = 1; 
     private const int SWP_NOMOVE = 0x0002; 
     private const int SWP_NOSIZE = 0x0001; 
     private const int SWP_NOACTIVATE = 0x0010; 
     private const int GW_HWNDPREV = 3; 
     private const int GW_HWNDLAST = 1; 


    [DllImport("user32.dll", EntryPoint = "SetWindowPos")] 
     private static extern int SetWindowPos(IntPtr hWnd, int hwndInsertAfter, int x, int y, int cx, int cy, int wFlags); 

#endregion 

private void updateposition(Item item) 
     { 
      if (item.IsOpen) 
      { 
       IntPtr hwnd = ((HwndSource)PresentationSource.FromVisual(item.popup.Child)).Handle; 
       SetWindowPos(hwnd, 0, (int)item.WorkPoint.X, (int)item.WorkPoint.Y, (int)item.popup.Width, (int)item.popup.Height, SWP_NOSIZE | SWP_NOACTIVATE); 

      } 


     }