我創建了一些窗口,禁用了邊框並設置了SizeToContent =「Height」。自動定位窗口 - WPF
XAML:
<Window Title="info" Width="350" ResizeMode="NoResize" WindowStyle="None" Opacity="1" Background="{x:Null}" AllowsTransparency="True" SizeToContent="Height">
<Grid>
<StackPanel Name="maingrid" Background="AliceBlue">
</StackPanel>
</Grid>
</Window>
當我打開這個窗口,我在右側屏幕底部放置它:
private void setposition()
{
var primaryMonitorArea = SystemParameters.WorkArea;
this.Left = primaryMonitorArea.Right - this.Width;
this.Top = primaryMonitorArea.Bottom - this.Height;
}
有時候我嘗試給孩子添加到maingrid,並再次將其重新定位,因爲身高已更改:
Border brd = new Border();
DockPanel.SetDock(brd, Dock.Top);
brd.Margin =new System.Windows.Thickness(0,5,0,0);
DockPanel dpanel = new DockPanel();
System.Windows.Controls.Label header = new System.Windows.Controls.Label();
header.Content = "test";
DockPanel.SetDock(header, Dock.Top);
dpanel.Children.Add(header);
brd.Child = dpanel;
maingrid.Children.Add(brd);
setposition();
System.Windows.Forms.Timer tmer = new System.Windows.Forms.Timer();
tmer.Tick += (sender, e) => timertick(brd, tmer);
tmer.Interval = 5 * 1000;
tmer.Enabled = true;
A讓窗口位置隨機定位在垂直平面上。 5秒鐘後,我破壞了其邊界,並試圖重新定位窗口
private void timertick(Border brd, System.Windows.Forms.Timer timer)
{
maingrid.Children.Remove(brd);
timer.Enabled = false;
setposition();
timer.Dispose();
}
,再次垂直位置有一些奇怪的值。
的位置在屏幕上:
在WPF中,您必須先等待渲染或強制佈局(通過調用measure /自己安排)才能使用新的大小。順便說一下,使用「DispatcherTimer」。 – Sinatr
如何在窗口渲染時等待? – Vozdr
我不確定究竟是什麼問題(究竟是什麼錯誤?),這是我的堅果評論。但是,如果這是正確的猜測,那麼只需執行'Dispatcher.Invoke((=)=> methodToRunAfterRender,DispatcherPriority.Render)。 – Sinatr