Я усердно работаю над собственной анимацией перехода в Frame.Но следующая загадочная проблема нанесла мне смертельный смертельный урон.
Во-первых, вот примерное окно.Он состоит из одного кадра и одной кнопки.Конечно, он отличается от моего проекта ствола, тем не менее, он все еще показал ту же проблему.

Когда я нажимаю кнопку, рамка переходит к Page1
.

РЕДАКТИРОВАНИЕ: здесь находится исходное состояние Page1.Это было сделано в VS2010 IDE.

Итак, в чем проблема?- проблема возникает, когда я звоню RenderToBitmap()
, чтобы получить изображение страницы назначения.(В этом случае пункт назначения - Page1
.)
Я звоню RenderToBitmap()
со следующим кодом.Вот весь код MainWindow
.
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_Navigated
.TextBox и TextBlock визуализируются, а CheckBox и RadioButton также визуализируются.Как ни странно, но проверенное состояние CheckBox и RadioButtons (изображение надреза и эллипса) еще не отрисовано.

Как я могу решить эту поддельную проблему?Конечно, это очень немного вещей.Но я думаю, что эта часть является основой моего приложения, поэтому я хочу сделать безупречно.
EDITED (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);
}
}
}
}