我在我的WPF项目中使用XamlReader。而且它可以工作(我的推荐信)
我目前的示例Xaml如下:
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Width="800" Height="600">
<Button Name="Test1" Content="Test1" Width="357" Height="88" Margin="14,417,0,0" ></Button>
<Button Name="Test2" Content="Test2" Width="357" Height="88" Margin="14,529,0,0" ></Button>
</Grid>并添加按钮的单击事件如下:
button = LogicalTreeHelper.FindLogicalNode(rootObject, "Test1") as Button ;
button.Click += new RoutedEventHandler(Button1_Click);这样写xaml有可能吗?
<Grid xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Width="800" Height="600">
<Button Name="Test1" Content="Test1" ... Click="Button1_Click"></Button>
<Button Name="Test2" Content="Test2" ... Click="Button2_Click"></Button>
</Grid>发布于 2015-05-01 10:59:21
XamlReader.Load不允许在其中附加eventHandlers。因此,使用这种技术动态地将eventHandlers附加到它。
1-在不使用eventHandlers -But的情况下编写Xaml字符串,写入这些控件的Name属性。
2-用XamlReader.Load(str);加载字符串
3-然后从它加载DataTemplate的内容。使用Grid template = ((Grid)(dt.LoadContent()));
注意:这里Grid是DataTemplate中的父控件。
4-按要附加事件处理程序的名称查找控件。Button img = (Button)template.FindName("MyButtonInDataTemplate");
希望能帮上忙。
发布于 2011-12-29 17:51:38
不是的。不能使用原始XAML保存事件或在运行时加载它们。这是XAML序列化的一个限制,因为序列化的XAML是自包含的,这意味着每个资源都应该在原始XAML中加载,而事件的代码逻辑则不是。阅读更多这里
https://stackoverflow.com/questions/8666522
复制相似问题