DISABLE ADBLOCK

ADBlock is blocking some content on the site

ADBlock errore

Question

I am using XamlReader in my WPF project. And it works (My reference)

My current sample Xaml is like that:

<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>

and adding button's click event like this:

button = LogicalTreeHelper.FindLogicalNode(rootObject, "Test1") as Button ;
button.Click += new RoutedEventHandler(Button1_Click);

Is it possible to write xaml like this?

<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>

Solution

XamlReader.Load not allowed to attach eventHandlers in it. so use this technique to dynamically attach the eventHandlers to it.

1- Write your Xaml string without eventHandlers -But write the Name property of those Controls.

2- Load the string with XamlReader.Load(str);

3- Then load the content of DataTemplate from it. using Grid template = ((Grid)(dt.LoadContent()));

Note: here Grid is the parent Control in DataTemplate.

4- Find the Control by Name you want to attach the Event Handler. Button img = (Button)template.FindName("MyButtonInDataTemplate");

I hope it helps.

OTHER TIPS

No. You can't save events or load them at run-time using raw XAML. It's a limitation of XAML Serialization, as serialized XAML is self-contained, means every resource should be in raw XAML to load and event's code logic is not . Read more here

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow