为绑定的孩子添加装饰器?

发布于 2024-12-13 05:45:41 字数 806 浏览 3 评论 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 返回模型,因此我不知道如何有效地访问控件。

<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>

Here is my code.No problem with that. I have created an adorner and i would like to add an adorner for each button when i want. It is a little difficult as i dont know how to get the Buttons. CanvasTableMap.Items returns the Model so i dont know how to get access to the controls efficiently.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一抹淡然 2024-12-20 05:45:41

一种简单的方法是为按钮的 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 或通过创建附加属性

An easy way to do that is to define a handler for the Loaded event of the button, and add the adorner in that handler:

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
    ...
}

If you don't want to use code-behind, you can create an attached behavior (either with System.Windows.Interactivity or by creating an attached property)

终陌 2024-12-20 05:45:41

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

You can use the ItemContainerGenerator to get the control created from the data (ContainerFromItem). Usually doing things that way is not such a good idea though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文