繁体   English   中英

设置WPF Viewbox的延迟?

[英]Set a Delay to a WPF Viewbox?

我有一个带有ViewboxWindow 根据我的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM