Tôi đang sử dụng một số mã mà tôi tìm thấy tại http://brianlagunas.com/wpf-copy-uielement-as-image-to-clipboard/ để sao chép XAML Treeview được hiển thị. Các treeview được cấu hình để di chuyển nếu nội dung tràn chiều cao có sẵn.Làm thế nào để sao chép một FrameworkElement bao gồm cả nội dung tràn?
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);
Đó hoạt động tốt khi nội dung của tôi phù hợp với bên trong khu vực khách hàng:
Nhưng đó là vấn đề khi nội dung tràn vùng client:
Có một cách mà tôi có thể lấy toàn bộ nội dung kiểm soát mà không cần có phải đổi kích thước phần tử trên màn hình không?
Edit: Đây là 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>
Và nút gắn kết các TreeView để lệnh của nút:
<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>
Tôi không biết điều này có thực hiện được hay không, nhưng bạn đã thử đặt 'VirtualizingStackPanel.IsVirtualizing =" False "' trên điều khiển TreeView chưa? –
Điều đó có thể buộc tất cả các nút hiển thị (mặc dù Treeview mẫu của tôi là rất nhỏ, vì vậy tôi không thể thấy bất kỳ sự khác biệt nào), nhưng dường như không thay đổi bmp được hiển thị. – ThunderFrame
Nếu 'param' là điều khiển' TreeView' bạn muốn vẽ nó hoạt động chính xác. Có thể bạn đang chuyển điều khiển 'ScrollViewer' đến hàm. –