0
<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 返回模型,所以我不知道如何有效地访问控件。

4

2 回答 2

0

您可以使用ItemContainerGenerator获取从数据创建的控件 ( ContainerFromItem)。不过,通常以这种方式做事并不是一个好主意。

于 2011-10-31T00:45:57.837 回答
0

一个简单的方法是为Loaded按钮的事件定义一个处理程序,并在该处理程序中添加装饰器:

XAML

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

代码隐藏

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

    // Add the adorner
    ...
}

如果您不想使用代码隐藏,您可以创建附加行为(使用System.Windows.Interactivity或通过创建附加属性)

于 2011-10-31T03:10:22.057 回答