Добавить украшателя для связанных детей? - PullRequest
0 голосов
/ 31 октября 2011
<ItemsControl Name="CanvasTableMap" ItemsSource="{Binding}" ItemsPanel="{DynamicResource ItemsPanelTemplate1}" ItemTemplate="{DynamicResource DataTemplate1}">
    <ItemsControl.Resources>
        <ItemsPanelTemplate x:Key="ItemsPanelTemplate1">
            <WrapPanel   Background="{DynamicResource ContentBackground}" />        
        </ItemsPanelTemplate>
        <DataTemplate x:Key="DataTemplate1">
            <Button Canvas.Left="100"  Content="{Binding Name}" Template="{DynamicResource ButtonTableTemplate}"></Button>
        </DataTemplate>
    </ItemsControl.Resources>       
</ItemsControl>

Вот мой код. Никаких проблем с этим. Я создал рекламного устройства и хотел бы добавить рекламное объявление для каждой кнопки, когда захочу. Это немного сложно, так как я не знаю, как получить кнопки. CanvasTableMap.Items возвращает модель, поэтому я не знаю, как эффективно получить доступ к элементам управления.

Ответы [ 2 ]

0 голосов
/ 31 октября 2011

Простой способ сделать это - определить обработчик для события Loaded кнопки и добавить в него обработчик:

XAML

<Button Canvas.Left="100"  Content="{Binding Name}" ... Loaded="Button_Loaded" />

Code-behind

private void Button_Loaded(object sender, RoutedEventArgs e)
{
    var button = (Button)sender;
    var layer = AdornerLayer.GetAdornerLayer(button);

    // Add the adorner
    ...
}

Если вы не хотите использовать code-behind, вы можете создать прикрепленное поведение (либо с помощью System.Windows.Interactivity, либо создавсобственность)

0 голосов
/ 31 октября 2011

Вы можете использовать ItemContainerGenerator, чтобы получить элемент управления, созданный из данных (ContainerFromItem). Обычно делать такие вещи не очень хорошая идея.

...