2

我在我的 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>
4

2 回答 2

1

不可以。您不能在运行时使用原始 XAML 保存或加载事件。这是 XAML 序列化的一个限制,因为序列化的 XAML 是自包含的,这意味着每个资源都应该在原始 XAML 中加载,而事件的代码逻辑不是。在这里阅读更多

于 2011-12-29T17:51:38.987 回答
1

XamlReader.Load不允许附加eventHandlers在其中。所以使用这种技术来动态地附加eventHandlers它。

1- 编写您的 Xaml 字符串,但不eventHandlers编写这些控件的 Name 属性。

2-加载字符串XamlReader.Load(str);

3- 然后从中加载 DataTemplate 的内容。使用Grid template = ((Grid)(dt.LoadContent()));

注意:这里GridDataTemplate.

4-按名称查找要附加事件处理程序的控件。 Button img = (Button)template.FindName("MyButtonInDataTemplate");

我希望它有所帮助。

于 2015-05-01T10:59:21.380 回答