Ich möchte einen Snapshot von meinem UserControl machen, der noch nicht gezeigt wurde. Das ist mein Code:Erstelle Snapshot eines nicht gezeigten UserControls
public Screenshot(MyViewModel viewModel)
{
if (viewModel == null)
return;
// Create a TabControl, where View is hosted in
var visualTab = new TabControl();
visualTab.Width = FrameworkAdjustments.VisualSize.Width;
visualTab.Height = FrameworkAdjustments.VisualSize.Height;
visualTab.TabStripPlacement = Dock.Left;
// Tabs should only be shown, if there are more than one 'SubView'
Visibility tabVisibility = Visibility.Collapsed;
if (viewModel.SubViews.Count > 1)
tabVisibility = Visibility.Visible;
foreach (var subView in viewModel.SubViews)
{
var tab = new TabItem();
tab.Header = subView.TranslatedId; // multilanguage header
tab.Visibility = tabVisibility;
if (subView.Id == viewModel.ActiveSubView.Id)
{
tab.IsSelected = true;
// Without the following line my UI works, but my TabControl is empty.
tab.Content = ViewManager.GetViewById(subView.Id);
// ViewManager.GetViewById(subView.Id); returns a UserControl
}
tab.Measure(FrameworkAdjustments.VisualSize);
tab.Arrange(new Rect(FrameworkAdjustments.VisualSize));
visualTab.Items.Add(tab);
}
_ContentCtrl = new ContentControl() { Width = FrameworkAdjustments.VisualSize.Width, Height = FrameworkAdjustments.VisualSize.Height };
_ContentCtrl.Content = visualTab;
_ContentCtrl.Measure(FrameworkAdjustments.VisualSize);
_ContentCtrl.Arrange(new Rect(FrameworkAdjustments.VisualSize));
RenderTargetBitmap bmp = new RenderTargetBitmap((int)FrameworkAdjustments.VisualSize.Width, (int)FrameworkAdjustments.VisualSize.Height, 96, 96, PixelFormats.Pbgra32);
bmp.Render(_ContentCtrl);
this.ItemBrush = new ImageBrush(bmp);
}
Dieser Code wird für jede 'MyViewModel', wenn ich meine App starten. 'MyViewModel' enthält eine Liste von 'SubViews', die den Inhalt der Tabs darstellen und eine 'FunctionKeyBar' enthalten, deren Buttons mit 'F1' bis 'F12' aktiviert werden können. Aber nachdem ich meinen Screenshot erstellt habe, kann ich die F1 bis F12 nicht mehr verwenden. Auch gibt es andere Probleme, wie Switch-Sprache. Gibt es eine andere Möglichkeit, einen Snapshot eines Steuerelements zu erstellen, das nicht angezeigt wurde?
Vielen Dank für alle Antworten.
Grüße Benny
Hallo AnjumSKhan, danke für schnelle Antwort. Mein Problem ist, ich möchte dem Benutzer eine Vorschau zeigen, so dass ich das _ContentControl nicht in den visuellen Baum einfügen kann, bevor ich den Snapshot mache. – Benny
@Benny PLZ siehe aktualisierte Antwort, funktioniert wie ein Charme. – AnjumSKhan
Ich habe das jetzt versucht, aber es ist nicht wirklich eine Lösung für mein Problem. Ich muss .NET 4.0 verwenden, was einige Unterschiede im async-await-Muster hat. Die andere Sache ist, ich habe bis zu 5 Instanzen (was von der Konfiguration abhängt) von 'MyViewModel', von dem ich nach dem Laden meiner Anwendung einen Screenshot (oder Thumbnail) machen möchte. Ich habe versucht, Ihre Lösung in einem Testprojekt und es ist ziemlich nett, aber in meinem Fall verursacht es eine Menge Rendering, was meine Leistung verlangsamt. – Benny