2011-12-29 53 views
0

我在我的WPF项目中使用XamlReader。和它的作品(My reference带点击事件的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> 

回答

0

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");

我希望它有帮助。

0

不能。您不能使用原始XAML在运行时保存事件或加载它们。这是XAML序列化的限制,因为序列化的XAML是独立的,意味着每个资源都应该在原始XAML中加载,而事件的代码逻辑则不是。阅读全文here

+0

谢谢Neeraj。我想,我也不能添加_Template_属性。 – makcura 2011-12-30 09:57:14