<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返回Model,所以我不知道如何有效地访问控件。
答案 0 :(得分:0)
您可以使用ItemContainerGenerator
来获取根据数据创建的控件(ContainerFromItem
)。通常以这种方式做事并不是一个好主意。
答案 1 :(得分: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
或创建附加属性)