具有Click事件的XamlReader

时间:2011-12-29 10:18:01

标签: wpf xaml xamlreader

我在WPF项目中使用 XamlReader 。它有效(My reference

我目前的样本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>

2 个答案:

答案 0 :(得分:1)

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

1-编写没有eventHandlers的Xaml字符串 - 但是写下这些控件的Name属性。

2-用XamlReader.Load(str);

加载字符串

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

注意:此处GridDataTemplate中的父控件。

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

我希望它有所帮助。

答案 1 :(得分:0)

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