将 FrameworkElement 及其 DataContext 保存到图像文件未成功

2024-03-31

我有一个名为 UserControl1 的简单 UserControl,其中包含一个 TextBlock:

  <UserControl x:Class="WpfApplication2.UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
     <Grid>
         <TextBlock Text="{Binding}"/>
     </Grid>
</UserControl>

我初始化了它的一个新实例,并在代码中给它一个 DataContext。当窗口关闭时,我必须将此控件绘制到图像文件中。 UserControl 不会呈现已创建的文件中的有界文本。

这是我使用用户控件的代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        Closing += MainWindow_Closing;
    }

    void MainWindow_Closing(object sender, CancelEventArgs e)
    {
        UserControl1 uc = new UserControl1();
        uc.DataContext = "hello";
        uc.Height = 100;
        uc.Width = 100;
        uc.Background = Brushes.LightBlue;
        DrawToImage(uc);
    }

    private void DrawToImage(FrameworkElement element)
    {
        element.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
        element.Arrange(new Rect(element.DesiredSize));

        RenderTargetBitmap bitmap = new RenderTargetBitmap((int)element.Width, (int)element.Height,
                                                           120.0, 120.0, PixelFormats.Pbgra32);
        bitmap.Render(element);

        BitmapEncoder encoder = new PngBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(bitmap));

        using (Stream s = File.OpenWrite(@"C:\555.png"))
        {
            encoder.Save(s);
        }
    }
}

我希望它足够清楚,任何帮助将不胜感激。


您只是忘记在手动测量/排列控件后强制更新控件的布局(这不足以强制绑定解析)。

一个简单的调用更新布局 http://msdn.microsoft.com/fr-fr/library/system.windows.uielement.updatelayout%28v=VS.95%29.aspx让它发挥作用:

private void DrawToImage(FrameworkElement element)
{
    element.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
    element.Arrange(new Rect(element.DesiredSize));
    element.UpdateLayout();

    RenderTargetBitmap bitmap = new RenderTargetBitmap((int)element.Width, (int)element.Height,
                                                        120.0, 120.0, PixelFormats.Pbgra32);
    bitmap.Render(element);

    BitmapEncoder encoder = new PngBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(bitmap));

    using (Stream s = File.OpenWrite(@"C:\555.png"))
    {
        encoder.Save(s);
    }
}

编辑:有关何时解析绑定的更多信息:link https://stackoverflow.com/questions/13875537/when-are-data-bindings-applied/13879146#13879146

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 FrameworkElement 及其 DataContext 保存到图像文件未成功 的相关文章

  • 计算ListBox中可见项目的数量

    我有一个名为 Book 的课程 class Book public string Name get set public string Author get set public int PagesCount get set public
  • 如何使TabTip.exe窗口弹出时最大化

    我想使用以下代码弹出虚拟键盘 var info new ProcessStartInfo C Program Files Common Files Microsoft Shared ink TabTip exe info WindowSty
  • HWND 子级的 WPF 渲染问题

    我想可以肯定地说 WPF 将其内容呈现为窗口背景 不存在传统 HWND 意义上的子窗口 因此 当人们在 WPF 应用程序中引入基于 HWND 的东西 例如 Web 浏览器 时 视觉外观方面的事情就开始出错 考虑一个窗口有一个带有两个子项的网
  • 如何在样式中访问控件父级的属性

    我的列表视图将项目数据模板化为标签 我正在为该标签设计一种样式 但我不知道如何访问父级的 ListViewItem IsSelected 属性 编辑 尝试了下面的建议 但仍然出现异常 这是我的完整代码
  • 在大型数据绑定 ObservableCollection 中添加/删除许多项目,而无需冻结 GUI

    我和我的团队正在开发一个 WPF 应用程序 该应用程序显示多个并发 XamDataChart 控件 由 Infragistics 提供 每个图表都绑定到不同的 ObservableCollection 最多可包含 200 万个点 对于每个图
  • 如何将 MouseDown 事件放入样式中?

    这有效 XAML
  • Tabcontrol 中的 SelectedIndex 不变 - 调度程序问题

    为什么在我设置 SelectedIndex 0 后 我随后 而不是响应 得到使用 SelectedIndex 4 调用的事件处理程序 我追踪到对调度程序的调用 但我不明白为什么 计划如下 我有一个页面 其中包含带有各种选项卡的选项卡控件 当
  • 如何使用 MVVM 更新 WPF 中编辑的数据? [复制]

    这个问题在这里已经有答案了 我正在为聊天应用程序构建 UI 设计 在尝试更新所选联系人的消息时遇到问题 选择现有联系人 选择编辑选项 然后编辑其属性 例如用户名和图像 后 唯一进行的更改是联系人的用户名和图像 我仍然想更改 MessageM
  • iTextSharp 从 WPF 固定文档生成 PDF

    我有一个简单的 WPF 应用程序 可以显示和打印一些内容 使用固定文档进行报告 如何使用免费且开放的解决方案从中生成 PDF 比如iTextSharp WPF 固定文档 也称为 XPS 文档 是对 PDF 的明显改进 它具有 PDF 所缺乏
  • WPF 网格布局

    是否可以在 WPF 中使用 Grid 来设计类似的东西 设计列很容易 但是行呢 或者有没有更好的解决方案 比如另一个容器 将每个矩形想象为模块 GroupBox 创建一个包含两列的外部网格 在此网格中 放置另外两个网格 每列一个 这将导致所
  • 设置 TextBlock 以保留开头和结尾的空白?

    EDIT 下面的代码实际上按照我想要的方式工作 这个问题有点误导 请忽略它 通常当我设置Text的财产TextBlock像这样 TextBlock tb new TextBlock tb Text Hello World 文本开头和结尾的空
  • WPF 应用程序的最佳本地数据库解决方案是什么?

    目前适用于 WPF 应用程序的最佳解决方案是什么一台电脑 where 各种用户登录它们并使用它们在本地获取 保存信息 以下是我看到选项的方式 MDF似乎是最好的选择 因为我假设您可以很好地锁定它 这样即使用户可以访问 mdf 文件 他们仍然
  • 如何访问另一个类的字段

    您好 我有一个带有 2 个窗口的 WPF C 应用程序 我正在尝试访问 public int myInt 在我的主窗口中从我的其他窗口 MainWindow myInt 3 智能感知甚至不允许我访问该变量 有人可以帮忙吗 您需要将其声明为s
  • 优化 WPF 中由单元格组成的网格以获得最短路径

    我目前正在尝试在 WPF 中制作一个由 Cell 对象组成的网格 我需要将单元格绑定到对象 该对象需要位于二维数组中 我需要它很大 可扩展 并改变单元格的颜色并将数据存储在对象中 我已经实现了 但是绘制网格似乎很慢 100x100 网格需要
  • 如何让 MSIX 应用安装程序在每次生成/发布期间输出正确的设置?

    问题 如何获取 MSIXappinstaller在每次构建 发布期间输出正确的设置 Context 这是一个后续问题启用侧面加载后 为什么 MSIX 不会在每次应用程序运行时自动检查更新 https stackoverflow com q
  • 如何以编程方式将访问键(快捷方式)添加到 WPF ContextMenu?

    我已经有以下内容 var myContextMenu new System Windows Controls ContextMenu var exitItem new MenuItem exitItem Header E xit exitI
  • 我对 MVVM 模式有一些疑问

    我叫 Jes s 来自西班牙 是一名 NET 开发人员 几天前我刚刚发现了这个伟大的网络 我有一些关于 MVVM 模式的问题 如果您能回答我 我将很高兴 我三个月前开始使用 WPF 并且学习了 MVP 模式 MVP 非常好 因为您可以很好地
  • 当绑定值为 null 时出现 WPF 日期选择器验证错误

    我有一个 WPF 应用程序 其中使用绑定到实体框架 带有 SQL Server 实体的日期字段的日期选择器 我将其绑定如下
  • 为什么我的 WPF XAML Grid TranslateTransform.X 不会?

    我可以使用它来更改网格的宽度 高度 那么为什么当我这样使用 Grid RenderTransform TranslateTransform X 时它不起作用
  • 如何覆盖运行时创建的 wpf 控件中的应用程序样式

    我试图在运行时创建一个 WPF 控件 但我不知道如何让它忽略来自 App xml 资源的样式 我尝试将样式设置为 null 并将 OverridesDefaultStyle 设置为 true 但没有成功 应用程序设置将前景设置为白色 我似乎

随机推荐

  • QTableView 中的搜索/查找功能

    我有一个 QWidget 里面有一个 QTableView 我需要在表格的第一列上有查找功能 因此当我单击 Ctrl F 时 会弹出一个查找对话框 class Widget QWidget def init self md parent N
  • 如何在c中增加数组

    我试图使用变量作为增量来增加 int 数组 但它会引发错误 int array MAXSIZE int n fill the array with some numbers some other code 这里的情况是 一旦我分析了前 n
  • Javascript:了解原型链

    我创建了一个简单的类 如下所示 var Class function Class prototype testObj a 2 b 3 现在如果我这样做console log Class testObj I get undefined 但是如
  • 为什么这个 c# 代码片段是合法的?

    愚蠢的问题 但是为什么下面的行会编译 int i new int 1 正如您所看到的 我没有输入第二个元素并在那里留下了逗号 即使您希望它不会编译 仍然可以编译 我想是因为 ECMA 334 标准说 array initializer va
  • 简单的 jQuery 回调在 IE 中中断

    我有几个这样的功能 this find subnav fadeIn 200 buttonHide Now 按钮隐藏 在本例中 是我在其他地方声明的函数 一旦 200ms fadeIn 完成 我想调用该函数 伟大的 适用于 FF 和 Safa
  • 带有平滑流格式 SDK 的基于 IIS 的 HLS

    我正在尝试通过 IIS 运行 HLS 并且通过 Silverlight 进行平滑流处理工作正常 但 HLS 不行 我拥有的 新的实时平滑流媒体发布点启用了 HLS 支持 通过 Smooth Streaming Format SDK 连接 P
  • 如何将 microsoft graph 365 用户个人资料照片从二进制数据转换为可读图像格式

    我已在 PHP 中使用 Microsoft Graph API 成功显示了有关管理员用户配置文件照片的信息 下面是我使用的代码
  • 向量(插入然后排序)或集合哪种方法更快?

    我有数字序列 未排序 无重复 目标是对它们进行排序 方法一 插入向量 O n 使用排序算法并排序 O nlogn 方法2 插入集合 o nlogn 哪种方法会更快 我觉得设置会更快 因为向量中的每个插入都必须分配 完整的数组元素并复制它然后
  • 通过从客户区的一部分拖动无框窗口来移动它

    正如标题所示 我想仅当用户将窗口从客户区域的一部分拖动时才移动窗口 这将是对正常标题栏移动的模仿 这是因为我的表单是自定义的 并且没有任何标题或标题栏 目前 我使用的代码如下 case WM NCHITTEST return HTCAPTI
  • 你能用 Java 获得基本的 GC 统计数据吗?

    我想让一些长时间运行的服务器应用程序定期输出 Java 中的一般 GC 性能数据 例如 Runtime freeMemory 的 GC 等价物 例如完成的周期数 平均时间等 我们的系统在客户机器上运行 怀疑配置错误的内存池导致了过多的 GC
  • 仅旋转特定 Excel 行中的文本

    我想使用以下命令旋转 Excel 文件中的标题Microsoft Office Interop 为了实现这一目标 我使用以下代码 worksheet Range A1 worksheet UsedRange Columns Count 1
  • HTTP 标头中什么被视为空白

    我刚刚阅读了 HTTP 标准 拟议标准更准确地说 第 1 部分 并对第 3 节倒数第二段中他们认为的 空白 感到困惑 https www rfc editor org rfc rfc7230 section 3 https www rfc
  • 在 Visual Studio 2008 for .NET CF 中处理不同分辨率

    我正在开发一个基于 NET CF 的图形应用程序 我的项目涉及大量绘图图像 我们决定在不同的手机分辨率上移植该应用程序 240 X 240 480 X 640 等 我将如何在单个解决方案 项目中实现这一目标 是否需要根据决议创建不同的项目
  • R 错误:java.lang.OutOfMemoryError:Java 堆空间

    我正在尝试将 R 连接到 Teradata 以将数据直接提取到 R 中进行分析 但是 我收到错误 Error in jcall rp I fetch stride block java lang OutOfMemoryError Java
  • SIP:错误数据连接丢失

    我已经在 android 中使用本机 sip 创建了 sip 应用程序 在其中 我在从 sip 服务器取消注册帐户时遇到问题 每次我得到数据连接丢失我也在android文档中看到 但没有对此错误的简短解释 而且它在注册时面临各种错误 如in
  • AutoMapper 排除字段

    我正在尝试将一个对象映射到另一个对象 但该对象非常复杂 在开发过程中 我希望能够排除一堆字段并逐一访问它们 或者能够指定仅映射我想要的字段 并在每次测试成功时增加字段 So class string field1 string field2
  • 使用 apache 2.4 设置 git-http-backend

    我试图使用 git http backend 和 apache 2 4 设置一个 git 服务器 我发现这个问题 https stackoverflow com questions 26734933 how to set up git ov
  • 如何制作多表头

    I am trying to make a table with 2 headers merged At the moment i made 2 seperate tables with 2 seperate headers and it
  • 用 ssh 替换 telnet

    我有一些程序使用 Net Telnet 模块连接到多个服务器 现在管理员决定将 Telnet 服务替换为 SSH 保留其他所有内容 例如用户帐户 我查看了 Net SSH2 发现我必须更改大部分程序 您是否知道其他更适合相同替代品的 SSH
  • 将 FrameworkElement 及其 DataContext 保存到图像文件未成功

    我有一个名为 UserControl1 的简单 UserControl 其中包含一个 TextBlock