Sto utilizzando un codice che ho trovato a http://brianlagunas.com/wpf-copy-uielement-as-image-to-clipboard/ per copiare una visualizzazione struttura XAML renderizzata. La vista ad albero è configurata per lo scorrimento se il contenuto supera l'altezza disponibile.Come copiare un FrameworkElement incluso il contenuto in overflow?
const long DPI = 96;
FrameworkElement element = (FrameworkElement)param;
double height = element.ActualHeight;
double width = element.ActualWidth;
RenderTargetBitmap bmp = new RenderTargetBitmap((int)Math.Round(width), (int)Math.Round(height), DPI, DPI, PixelFormats.Default);
DrawingVisual dv = new DrawingVisual();
using (DrawingContext dc = dv.RenderOpen())
{
VisualBrush vb = new VisualBrush(element);
dc.DrawRectangle(vb, null, new Rect(new Point(), new Size(width, height)));
}
bmp.Render(dv);
DataObject _data = new DataObject();
_data.SetImage(bmp);
che funziona bene quando il mio contenuto si inserisce all'interno dell'area client:
Ma è problematico quando il contenuto superano l'area client:
C'è un modo per ottenere l'intero contenuto di controllo senza dovendo ridimensionare l'elemento sullo schermo?
Edit: Ecco il Treeview XAML:
<TreeView x:Name="ProjectTree" Grid.Row="1"
ItemContainerStyle="{StaticResource ShinyTreeView}"
HorizontalContentAlignment="Stretch"
MouseDoubleClick="TreeView_OnMouseDoubleClick"
Style="{StaticResource CodeExplorerTreeViewStyle}" BorderThickness="0,1"
VirtualizingPanel.IsVirtualizing="False">
<i:Interaction.Behaviors>
<controls:BindableSelectedItemBehavior SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
</i:Interaction.Behaviors>
</TreeView>
e il pulsante che lega la vista ad albero al comando del tasto:
<Button Command="{Binding CopyResultsCommand}" CommandParameter="{Binding ElementName=ProjectTree}">
<Image Height="16" Source="../../Resources/document-copy.png" />
<Button.ToolTip>
<TextBlock Text="{Resx ResxName=Rubberduck.UI.RubberduckUI, Key=CodeExplorer_CopyToolTip}" />
</Button.ToolTip>
</Button>
Non so se questo potrebbe fare il trucco o no, ma hai provato a impostare 'VirtualizingStackPanel.IsVirtualizing =" False "' sul controllo TreeView? –
Ciò potrebbe costringere tutti i nodi a eseguire il rendering (sebbene il mio esempio di visualizzazione di esempio sia molto piccolo, quindi non vedo alcuna differenza), ma non sembra che cambi il bmp renderizzato. – ThunderFrame
Se 'param' è il controllo' TreeView' che vuoi disegnare funziona correttamente. Forse stai passando il controllo 'ScrollViewer' alla funzione. –