[英]Set a Delay to a WPF Viewbox?
我有一个带有Viewbox
的Window
。 根据我的Viewbox
的内容,调整Window
大小可能会变得“混乱”。 我不需要实时调整Viewbox
内容的大小,一旦用户调整Window
大小就足以更新Viewbox
。
我自己在Google上找不到有关此主题的任何信息。
有没有办法“延迟”我的Viewbox
?
编辑:如果没有,模拟这种行为的最佳方法是什么?
我能想到的最好的办法是在视图框周围创建一个网格,为宽度和高度创建2个属性,通过双向绑定将它们绑定到窗口和网格,然后在绑定中设置延迟,因此网格和视图框都在其中会在延迟后调整大小,但是由于这些属性,我将不得不为窗口设置预定义的起始大小。
您可以将Canvas
用作ViewBox
的容器。 (直接容器必须是Grid
,它为ViewBox
提供了调整大小的边界。)
与Grid不同,Canvas使用绝对定位,并且不随Window
调整其大小,其子项也是如此。
<Grid x:Name="root">
<Canvas>
<Grid x:Name="innerGrid">
<Viewbox>
<Content here />
</Viewbox>
</Grid>
</Canvas>
</Grid>
然后,您可以控制何时调整ViewBox
的大小(通过调整其直接容器的大小)。
以下代码受注释的启发。 它使用一次Timer
,当用户完成操作后计时器开始计时,并且在计时器间隔过去时进行调整大小。
System.Timers.Timer timer; //Declare it as a class member, not a local field, so it won't get GC'ed.
public MainWindow()
{
InitializeComponent();
timer = new System.Timers.Timer(1000);
timer.AutoReset = false; //the Elapsed event should be one-shot
timer.Elapsed += (o, e) =>
{
//Since this is running on a background thread you need to marshal it back to the UI thread.
Dispatcher.BeginInvoke(new Action(() => {
innerGrid.Width = root.ActualWidth;
innerGrid.Height = root.ActualHeight;
}));
};
this.SizeChanged += (o, e) =>
{
//restart the time if user is still manipulating the window
timer.Stop();
timer.Start();
};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.