XamlReader с Click Event - PullRequest
       47

XamlReader с Click Event

1 голос
/ 29 декабря 2011

Я использую XamlReader в моем проекте WPF. И это работает ( Моя ссылка )

Мой текущий пример 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 ]

1 голос
/ 01 мая 2015

XamlReader.Load не разрешено прикреплять eventHandlers в нем.поэтому используйте эту технику для динамического присоединения eventHandlers к ней.

1 - Напишите свою строку Xaml без eventHandlers - Но напишите свойство Name этих элементов управления.

2 - Загрузитестрока с XamlReader.Load(str);

3- Затем загрузите содержимое DataTemplate из него.используя Grid template = ((Grid)(dt.LoadContent()));

Примечание: здесь Grid является родительским элементом управления в DataTemplate.

4- Найдите элемент управления по имени, к которому вы хотите присоединить обработчик событий.Button img = (Button)template.FindName("MyButtonInDataTemplate");

Надеюсь, это поможет.

0 голосов
/ 29 декабря 2011

Нет.Вы не можете сохранять события или загружать их во время выполнения, используя сырой XAML.Это ограничение сериализации XAML, так как сериализованный XAML является автономным, что означает, что каждый ресурс должен быть загружен в сырой XAML, а логика кода события - нет.Подробнее здесь

...