У меня есть приложение для Windows Phone 7 с некоторым xaml, которое выглядит следующим образом:
<Grid x:Name="ContentGrid" Grid.Row="1">
<ItemsControl x:Name="MyView" ItemTemplate="{StaticResource MyInner}"/>
</Grid>
Шаблон элемента здесь выглядит так:
<DataTemplate x:Key="MyInner">
<ItemsControl ItemsSource="{Binding}" ItemTemplate="{StaticResource MyInner_Item}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</DataTemplate>
И, наконец, шаблон MyInner_Item выглядит следующим образом::
<DataTemplate x:Key="MyInner_Item">
<Button x:Name="MyButton">
<Button.Template>
<ControlTemplate>
<Border HorizontalAlignment="Center" VerticalAlignment="Center" x:Name="myborder">
<Image Source="{Binding Path=ImageUri}" Width="{Binding Path=Width}" Height="{Binding Path=Height}" Stretch="Fill" />
</Border>
</ControlTemplate>
</Button.Template>
</Button>
</DataTemplate>
Итак, это ItemsControl, который содержит ItemsControl, который содержит кнопки.По сути, это создает двумерный массив кнопок.
Что я хочу сделать, это добавить обработчик события к событию Click кнопок.
Вот подвох:код, который стоит за этим написан на F #.Насколько мне известно, я не могу указать свой обработчик событий в XAML, так как F # не взаимодействует с WPF любым приятным способом.Поэтому мне нужно добавить свой обработчик событий вручную в коде.
Есть ли простой способ сделать это?
В настоящее время у меня есть некоторый F #, который выглядит следующим образом:
let myView : ItemsControl = this?MyView
do myView.ItemsSource <- viewModel.BoardData
Здесь BoardData представляет собой список списков.
Мне было интересно, можно ли перебрать элементы управления в ItemsControl, чтобы добавить мои обработчики событий?Хотя у меня возникли проблемы с этим.Например, в следующем:
let container = myView.ItemContainerGenerator.ContainerFromItem(myView.Items.[0])
... устанавливает контейнер в нуль.Фактически, все методы, которые я пробовал из myView.ItemContainerGenerator, возвращают ноль.
Итак, как мне подключить обработчик событий, чтобы я мог реагировать на нажатия кнопок?