将事件/命令与 XamlReader 结合使用

2023-12-11

我正在使用 XamlReader.Parse(string) 动态构建我的数据模板。我遇到的问题是我无法在使用 XamlReader 创建的任何控件上放置任何事件。在网上做了一些研究后,我了解到这是 XamlReader 的一个已知限制。

我对 WPF 中的命令了解不多,但我可以以某种方式使用它们来获得相同的结果吗?如果是这样怎么办?如果没有,有什么方法可以处理使用 Xaml Reader 创建的控件中的代码隐藏事件吗?

下面是我创建的数据模板的示例。我在将托管此数据模板的窗口的代码隐藏中定义了 MenuItem_Click 事件处理程序。

尝试运行它时出现以下错误: System.Windows.Markup.XamlParseException 未处理:无法从文本“MenuItem_Click”创建“单击”。

DataTemplate result = null;
        StringBuilder sb = new StringBuilder();

        sb.Append(@"<DataTemplate 
                        xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'
                        xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'>
                            <Grid Width=""Auto"" Height=""Auto"">

                            <TextBlock Text=""Hello"">
                                <TextBlock.ContextMenu>
                                    <ContextMenu>
                                         <MenuItem 
                                          Header=""World""
                                          Click=""MenuItem_Click""></MenuItem>
                                    </ContextMenu>
                                </TextBlock.ContextMenu>
                            </TextBlock>

                            </Grid>
                      </DataTemplate>");

        result = XamlReader.Parse(sb.ToString()) as DataTemplate;

希望迟来的答案可以帮助其他人:

我发现我需要解析后绑定事件,并且必须从 Xaml 字符串中删除单击事件。

在我的场景中,我将生成的 DataTemplate 应用到 DataTemplate,连接 ItemSsource,然后添加处理程序。这确实意味着所有项目的点击事件都是相同的,但就我而言,标题是所需的信息,并且方法是相同的。

//Set the datatemplate to the result of the xaml parsing.
myListView.ItemTemplate = (DataTemplate)result;

//Add the itemtemplate first, otherwise there will be a visual child error
myListView.ItemsSource = this.ItemsSource; 

//Attach click event.
myListView.AddHandler(MenuItem.ClickEvent, new RoutedEventHandler(MenuItem_Click));

然后点击事件需要返回到原始来源,在我的例子中,发送者将是使用 DataTemplate 的 ListView。

internal void MenuItem_Click(object sender, RoutedEventArgs e){
    MenuItem mi = e.OriginalSource as MenuItem;
    //At this point you can access the menuitem's header or other information as needed.
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将事件/命令与 XamlReader 结合使用 的相关文章

  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • JNI 将 Char* 2D 数组传递给 JAVA 代码

    我想从 C 代码通过 JNI 层传递以下指针数组 char result MAXTEST MAXRESPONSE 12 12 8 3 29 70 5 2 42 42 在java代码中我写了以下声明 public static native
  • 函数参数的默认参数是否被视为该参数的初始值设定项?

    假设我有这样的函数声明 static const int R 0 static const int I 0 void f const int r R void g int i I 根据 dcl fct default 1 如果在参数声明中指
  • 查看 NuGet 包依赖关系层次结构

    有没有一种方法 文本或图形 来查看 NuGet 包之间的依赖关系层次结构 如果您使用的是新的 csproj 您可以在此处获取所有依赖项 在项目构建后 项目目录 obj project assets json
  • Visual Studio 在构建后显示假错误

    我使用的是 Visual Studio 2017 构建后 sln在调试模式下 我收到错误 但是 当我通过双击错误列表选项卡中的错误来访问错误时 错误会从页面中消失 并且错误数量也会减少 我不太确定这种行为以及为什么会发生这种情况 有超过 2
  • unordered_map 中字符串的 C++ 哈希函数

    看起来 C 标准库中没有字符串的哈希函数 这是真的 在任何 c 编译器上使用字符串作为 unordered map 中的键的工作示例是什么 C STL提供模板专业化 http en cppreference com w cpp string
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • C++ 中的双精度型数字

    尽管内部表示有 17 位 但 IEE754 64 位 浮点应该正确表示 15 位有效数字 有没有办法强制第 16 位和第 17 位为零 Ref http msdn microsoft com en us library system dou
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • WebBrowser.Print() 等待完成。 。网

    我在 VB NET 中使用 WebBrowser 控件并调用 Print 方法 我正在使用 PDF 打印机进行打印 当调用 Print 时 它不会立即启动 它会等到完成整个子或块的运行代码 我需要确保我正在打印的文件也完整并继续处理该文件
  • 这个可变参数模板示例有什么问题?

    基类是 include
  • 使用 omp_set_num_threads() 将线程数设置为 2,但 omp_get_num_threads() 返回 1

    我有以下使用 OpenMP 的 C C 代码 int nProcessors omp get max threads if argv 4 NULL printf argv 4 s n argv 4 nProcessors atoi argv
  • 如何在richtextbox中使用多颜色[重复]

    这个问题在这里已经有答案了 我使用 C windows 窗体 并且有 richtextbox 我想将一些文本设置为红色 一些设置为绿色 一些设置为黑色 怎么办呢 附图片 System Windows Forms RichTextBox有一个
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 如何使用 C++11 using 语法键入定义函数指针?

    我想写这个 typedef void FunctionPtr using using 我该怎么做呢 它具有类似的语法 只不过您从指针中删除了标识符 using FunctionPtr void 这是一个Example http ideone

随机推荐

  • 使 QTableView 的行随着编辑器高度的增加而扩展

    这直接来自这个问题 这是一个 MRE class MainWindow QtWidgets QMainWindow def init self super init self setWindowTitle Get a grip of tab
  • Python 中“可哈希”是什么意思?

    Python 代码中的对象到底是什么意思hashable 来自Python术语表 如果一个对象有一个在其生命周期内永不改变的哈希值 它需要一个 hash 方法 并且可以与其他对象进行比较 它需要一个 eq or cmp 方法 比较相等的可哈
  • 在 React 中更新 forEach 循环中的状态无法正常工作

    我想在每次收到承诺时循环更新一个状态 但我的状态只展现了最后的承诺 我猜这是因为 由于设置状态是异步的 它使用先前状态更新之前可用的映射 在不使用 Promise all 的情况下如何实现这一目标 const dataList setDat
  • CouchDB 和 PouchDB 之间的过滤同步

    我目前正在考虑在我想编写的下一个应用程序中使用 CouchDB 2 和 PouchDB 7 基本上 我将在中央存储中拥有一个 CouchDB Web 客户端和移动应用程序将启动一个能够思考的 PouchDB 基本上这就像一个魅力 但是 如果
  • 为什么 python 像这样排序我的字典? [复制]

    这个问题在这里已经有答案了 这是我有的字典 propertyList id int name char 40 team int realOwner int x int y int description char 255 port bool
  • 浮点数的正则表达式?

    我正在尝试编写一个正则表达式来验证浮点数 这是我迄今为止所做的 1 9 d 0 2 d 1 1 如果满足以下条件 则该号码有效 要么是正的 要么是负的 最多 2 位数字 十位或百位 百位数字不能为0 只能是1 9 比例最大为 1 小数值可以
  • StackOverflowException 未处理

    我的代码中出现此错误 MedCareProviderLibrary dll 中发生 System StackOverflowException 类型的未处理异常 这是我的代码片段以及错误的来源 它在有错误的部分上显示一个黄色箭头 显示错误的
  • 在 Matlab 中查找 pcolor 中的轮廓/边缘

    我正在尝试制作一个遵循 像素 边缘的轮廓pcolor在 Matlab 中绘图 这可能在图片中得到最好的解释 这是我的数据图 黄色数据 data 1 和蓝色数据 data 0 之间有明显的界限 请注意 这是一个pcolor绘图 因此每个 正方
  • 从 for 循环到 Java 8 Stream 示例

    我想要一个 Java 8 的简单示例Streams去理解它 我有这个代码可以返回免费出租车 我想用使用 Java 8 流的等效代码替换这个 for 循环 private List
  • PHP 根据由括号分隔的字符串中的键名称创建多维关联数组

    我有一个字符串 括号中包含可变数量的键名称 例如 str key subkey otherkey 我需要创建一个多维数组 该数组具有字符串中表示的相同键 value只是一个在这里不重要的字符串值 arr key gt subkey gt o
  • 无法导入 anaconda 中安装的包

    I have a simple question I have install resampy using anaconda conda install c conda forge resampy 现在 当我将 resampy 导入到我的
  • 采用整数并返回所有可能的加法格式的算法

    我需要编写一个算法 它接受一个整数并返回所有可能的加法格式 e g 如果我输入 6 它将返回以下字符串 0 6 6 1 1 1 1 1 1 6 1 1 1 1 2 6 1 1 1 3 6 1 1 4 6 1 5 6 2 1 1 1 1 6
  • 如何获取目录的父目录

    如何获取目录的父目录 File parent new File System out println Parent directory parent getParent prints Parent directory null 我有一个 M
  • 绕过 500 行限制

    我编写了一个我很满意的 Google Fusion Tables 脚本 如下 但它只在我的表中加载 500 行点 该表有 20 000 多行 这是我第一次来到这个社区 我真的很惊讶地发现了极限 有什么方法可以加载所有行吗
  • 计算 Pandas 中值的数量[重复]

    这个问题在这里已经有答案了 我有一个 Pandas 数据框 如下构建 Col1 Col2 1 A 1 B 1 B 2 A 2 A 3 A 3 Nan 对于 Col1 的每个值 我想计算 Col2 的每个值 忽略 Nan 值 并将总和放入关联
  • 为什么可浏览属性使属性不可绑定?

    我正在尝试使用System Windows Forms PropertyGrid 要使属性在此网格中不可见 应使用BrowsableAttribute set to false 但添加此属性会使该属性不可绑定 Example 创建一个新的
  • 操作方法:Grails 3.0.2 + Oracle Database 12c?

    我正在使用 Grails 迈出第一步 并尝试使用 Oracle Database 12c 创建一个 hello world 应用程序 不幸的是 www grails org 上有关数据库特定部分的教程文档似乎并不那么全面 例如 与我使用了几
  • 没有可编译的体系结构(ARCHS=、VALID_ARCHS=armv7 armv7s)

    我使用的是 Xcode 4 5 2 并且有一个无法为运行 iOS 6 0 1 的 iPhone 编译的项目 尽管其他项目使用相同的设置可以正常编译 如下图所示 关于如何解决这个问题有什么想法吗 您可能正在使用一些尚不支持armv7s架构的第
  • 如何从 JavaScript 函数调用 PHP 类方法 [重复]

    这个问题在这里已经有答案了 可能的重复 从 javascript 调用 php 函数 我知道php是服务器端 JavaScript是客户端 但我想知道如何在调用 JavaScript 函数时运行 PHP 方法 下面是我的代码 我知道错误是
  • 将事件/命令与 XamlReader 结合使用

    我正在使用 XamlReader Parse string 动态构建我的数据模板 我遇到的问题是我无法在使用 XamlReader 创建的任何控件上放置任何事件 在网上做了一些研究后 我了解到这是 XamlReader 的一个已知限制 我对