使用唯一 ID 以编程方式创建按钮

本文关键字:方式 创建 按钮 编程 唯一 ID | 更新日期: 2023-09-27 18:34:08

我通过首先填充一个包含get/set方法的类,然后在XAML中使用该信息来创建了一些按钮。

C#

List<MediaDetail> movies = new List<MediaDetail>();
...
...
MovieListView.ItemsSource = movies;  

XAML

<Window.Resources>
    <DataTemplate x:Key="ItemTemplate">
        <WrapPanel Orientation="Vertical"  Width="Auto">
            <Button Width="200" Height="300" Click="SelectMovie_Click" Name ="NEED THIS TO BE DYNAMIC">
                <Button.Template>
                    <ControlTemplate>
                        <Image Source="{Binding image}"/>
                    </ControlTemplate>
                </Button.Template>
            </Button>
            <TextBlock Text="{Binding title}" HorizontalAlignment="Center"/>
        </WrapPanel>
    </DataTemplate>        
</Window.Resources>

<ListView Name="MovieListView" ItemTemplate="{StaticResource ItemTemplate}" ItemsSource="{Binding Path = movies}" Margin="0,0,0,0" SelectionChanged="MovieListView_SelectionChanged" Grid.Row="1">
        <ListView.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Columns="5" />
            </ItemsPanelTemplate>
        </ListView.ItemsPanel>
    </ListView>

但是问题是,我需要每个按钮都有一个唯一的ID。我在其他地方读到这不能用XAML完成,但我不确定如何在我的C#代码中创建这些按钮或在哪里创建这些按钮。

使用唯一 ID 以编程方式创建按钮

我认为这里最灵活的解决方案是定义一种行为:

public class UniqueNameBehavior : Behavior<FrameworkElement>
{
    protected override void OnAttached()
    {
        base.OnAttached();
        //assign unique name to the associated element, for example:
        AssociatedObject.Name = Guid.NewGuid().ToString().Replace("-", null);
    }
}

在 XAML 中,将此行为附加到任何元素:

<Button>
    <i:Interaction.Behaviors>
        <local:UniqueNameBehavior/>
    </i:Interaction.Behaviors>
</Button>

其中xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"来自System.Windows.Interactivity程序集。