C# 带有复选框的导航(帧)中的渲染计时

C# 带有复选框的导航(帧)中的渲染计时,c#,wpf,C#,Wpf,我努力工作,为我自己的过渡动画帧。但接下来的神秘问题给我带来了致命的伤害 首先,这里是一个示例窗口。它由一个框架和一个按钮组成。当然,它与我的主干项目不同,然而,它仍然显示出相同的问题 当我单击按钮时,框架导航到Page1 已编辑:这里是第1页的源状态。它是在VS2010 IDE中拍摄的。 那么,问题是什么调用RenderToBitmap()以获取目标页面的可视性时出现问题。(在这种情况下,目的地是Page1) 我使用以下代码调用RenderToBitmap()。下面是主窗口的所有代码 p

我努力工作,为我自己的过渡动画帧。但接下来的神秘问题给我带来了致命的伤害

首先,这里是一个示例窗口。它由一个框架和一个按钮组成。当然,它与我的主干项目不同,然而,它仍然显示出相同的问题

当我单击按钮时,框架导航到
Page1

已编辑:这里是第1页的源状态。它是在VS2010 IDE中拍摄的。

那么,问题是什么调用
RenderToBitmap()
以获取目标页面的可视性时出现问题。(在这种情况下,目的地是
Page1

我使用以下代码调用
RenderToBitmap()
。下面是
主窗口的所有代码

public partial class MainWindow : Window
{
    public MainWindow() { InitializeComponent(); }

    Page1 pg1 = new Page1();
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        this.frame.Navigate(pg1); //start to navigate.
    }

    private void frame_Navigated(object sender, NavigationEventArgs e)
    {
        //SaveVisualToPng is my own static method.
        WPFHelper.SaveVisualToPng("d:\\a.png", pg1);
    }
}
最后,这里是调用
frame\u Navigated
时的视觉状态。文本框和文本块被渲染,复选框和RadioButton也被渲染。奇怪的是,复选框和单选按钮的选中状态(凹口图像和椭圆图像)尚未渲染

我该怎么处理这个该死的问题?当然,这是一个非常小的事情。但我认为这部分是我的应用程序的基础,所以我想做得完美无瑕

已编辑(2)这里是SaveVisualToPng()的源代码。最初它包含一些帮助工作的方法,比如GetDPI,但我忽略了这一点。相反,下面的代码会产生相同的结果

public static class WPFHelper
{

    public static void SaveVisualToPng(string path, Visual v)
    {
        int width = Convert.ToInt32(((FrameworkElement)v).ActualWidth);
        int height = Convert.ToInt32(((FrameworkElement)v).ActualHeight);

        RenderTargetBitmap myBmp = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
        myBmp.Render(v);

        if (myBmp != null)
        {
            PngBitmapEncoder png = new PngBitmapEncoder();
            png.Frames.Add(BitmapFrame.Create(myBmp));
            using (Stream stm = System.IO.File.Create(path))
            {
                png.Save(stm);
            }
        }
    }

}

查看将您在调度程序上的工作排队(以便WPF有时间呈现控件)是否有助于:


如果没有您的
WPFHelper
实现,我无法测试它,但值得一试。

请尝试更正您问题中的拼写和语法。我说的对吗,您想拍摄第1页的截图吗?问题是,checkbok和radiobutton在屏幕截图中都没有被选中?但在屏幕上,这些都被选中了?请参阅我编辑的帖子WaltiD。感谢您的关注。您在所有这些中的哪里选中了复选框/单选按钮?这些控件是在第1页的XAML中选中的,而不是在运行时。遗憾的是,您的帮助不起作用。我将很快为SaveVisualToPng编辑我的帖子。等一下。@mjk是我的代码正确的还是你必须以某种方式修改它?基本上,我认为这是WPF的一个缺陷。因为它与复选框radiobutton和其他控件不一致。但是通过你的技巧(给UI线程一个线程计时),问题消失了。@mjk那么你在原始评论中所说的“你的帮助不起作用”是什么意思呢?我修改了一个代码,以便在故事板开始时,而不是在故事板开始之前,获得一个视觉效果。当然它不能解决问题,但实际上,我很满意。
private void frame_Navigated(object sender, NavigationEventArgs e) 
{ 
    Action save = () => WPFHelper.SaveVisualToPng("d:\\a.png", pg1); 
    Dispatcher.BeginInvoke(DispatcherPriority.Background, save);
}