最大值VerticalOffset
是監視器邊框,如何將Popup
移至屏幕外?假設一個Popup
想要顯示在屏幕的右下角並顯示Analog Clock
,從屏幕外輸入。將彈出窗口移至wpf應用程序中的屏幕外
我想把Popup
放在屏幕外並在需要時輸入。
最大值VerticalOffset
是監視器邊框,如何將Popup
移至屏幕外?假設一個Popup
想要顯示在屏幕的右下角並顯示Analog Clock
,從屏幕外輸入。將彈出窗口移至wpf應用程序中的屏幕外
我想把Popup
放在屏幕外並在需要時輸入。
您需要將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綁定到它將是最好的解決方案。
沒有對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);
}
}
謝謝@Kenn但主要問題是不打開或關閉彈出窗口,主要問題是彈出屏幕! – Moslem7026