- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用我在 http://brianlagunas.com/wpf-copy-uielement-as-image-to-clipboard/ 找到的一些代码复制呈现的 XAML Treeview。如果内容超出可用高度, TreeView 将配置为滚动。
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);
当我的内容适合客户区时,效果很好:
但是当内容溢出客户区时就有问题了:
有没有办法无需调整屏幕元素的大小就可以获得整个控件内容?
编辑:这是 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>
以及将 TreeView 绑定(bind)到按钮命令的按钮:
<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>
最佳答案
我对您的代码做了一些实验。问题似乎是您正在使用 element.ActualHeight
和 element.ActualWidth
构造位图,这当然等于 TreeView 控件的当前大小(而不是实际上更长的内容面板),所以这就是您在输出中呈现的内容。
我为解决此问题所做的是将 ScrollViewer.VerticalScrollBarVisibility
设置为 Disabled
用于 TreeView
然后将其包装在 滚动查看器
。这将使您的 TreeView
达到它所需要的全高,并且仍然有一个滚动条来滚动它。现在,当您使用 ActualWidth 和 ActualHeight 构建位图时,您会得到一个完整尺寸的位图,并对其进行渲染以获得所需的结果。
关于c# - 如何复制包含溢出内容的 FrameworkElement?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37572471/
我是 Silverlight 编程的新手。谁能告诉我两者之间的区别 FrameworkElement obj=sender as FrameworkElement 和 FrameworkElement
在对 Cannot find governing FrameworkElement or FrameworkContentElement for target element 错误进行了一些研究后,我
我试图在构造函数中设置Page的Name属性: public partial class PageListView : Page { public PageListView(string ti
试图让 OnMouse 事件出现在 child 身上 FrameworkElement .父元素是 Panel (并且 Background 属性不是 Null)。 class MyFramework
我们有一个派生自 FrameworkElement 且不受我们控制的类。此类在 OnInitialize 中注册事件处理程序方法。 由于 FrameworkElement 不提供与 OnInitial
我一直在通过 Sells/Griffiths 的“Programming WPF”自学 WPF,我发现它是一个很好的资源,但我正在尝试采用他们向我介绍的一些概念并开始更进一步,我遇到了关于如何将各个部
我正在使用我在 http://brianlagunas.com/wpf-copy-uielement-as-image-to-clipboard/ 找到的一些代码复制呈现的 XAML Treeview
我不清楚您何时会使用 UIElement而不是 FrameworkElement ,以及为什么会有 FrameworkElement根本没有课。本质上,FrameworkElement 的额外功能是什
我正在尝试在使用 Uno 构建的 WebAssembly 应用程序中创建文件对话框。我添加了一个自定义 FrameworkElement 来创建 在页面中像这样: [HtmlElementAttrib
我收到了 FrameworkElement在类的事件处理程序中。是否有可能检查这个 FrameworkElement是具有 borderthickness/borderbrush 属性的元素吗? 喜欢
根据文档“(FrameworkElement.SizeChanged) 当此元素上的 ActualHeight 或 ActualWidth 属性值更改时发生。” 运行以下测试方法,我的矩形的 Actu
每个 FrameworkElement 都有一个 Loaded 事件,该事件在以下情况下触发: the tree is not only built and initialized, but layo
您能否举例说明如何创建直接从 FrameworkElement 派生的自定义复合控件(在 Silverlight 4 中)。这是一个模型: public sealed class CompositeI
我有一棵视觉树。主窗口有一个全尺寸的 Canvas 。 Canvas 包含一些自定义视觉对象的根。第一个自定义 Visual (A) 可以根据用户正在查看的内容进行扩展和收缩,这些内容位于子项中(Bs
是否可以识别哪个窗口/用户控件拥有 FrameworkElement ? 谢谢你。 最佳答案 您可以使用 .Parent “走上去” - 属性,直到找到窗口或用户控件。只需在向上走时检查 parent
我有一个 FrameworkElement(实际上是一个 ToggleButton),其内容中有一个 Popup。 我是这样访问的: ToggleButton button = (ToggleButt
我正在尝试自定义绘制 GridSplitter,并且我有以下 XAML 代码: DiffSplitterCanva
如何获取框架元素边界矩形的左上角坐标? let fe : FrameworkElement = ea.Item.Content let p = fe.TranslatePoint(ne
对于 WPF,Window 类中有一个 ContentRendered 事件,它让我们知道视觉元素何时被渲染。 有什么可以帮助我为 UWP 应用实现相同的结果吗?我想知道 FrameworkEleme
我的一个数据源生成一组值,这些值被输入到以下接口(interface) public interface IData { string Name { get; } FrameworkE
我是一名优秀的程序员,十分优秀!