在每个ListBox项中添加Name属性

本文关键字:添加 Name 属性 ListBox | 更新日期: 2023-09-27 18:26:44

我有一个WPF项目,其中有一个Resource Dictionary,用于存储我的样式。在这本字典里,我有一个ListBoxItem Template,看起来像这样。

    <DataTemplate x:Key="GenreStyle">
    <Grid Width="150" Height="150" Background="Transparent">
        <Image x:Name="GenreImage" Tag="{Binding Genre}" RenderOptions.BitmapScalingMode="HighQuality" Source="{Binding GenreSource}" Width="140" Height="140" MouseEnter="GenreImage_MouseEnter" MouseLeave="GenreImage_MouseLeave" MouseLeftButtonDown="GenreImage_MouseLeftButtonDown" MouseLeftButtonUp="GenreImage_MouseLeftButtonUp"/>
    </Grid>
</DataTemplate>

现在我想做的是,当我点击每个项目时,阅读Images Tag。我现在做的是:

private void StationsListLB_PreviewMouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    var item = ItemsControl.ContainerFromElement(StationsListLB, e.OriginalSource as DependencyObject) as ListBoxItem;
    if (item != null)
    {
       MessageBox.Show(??????);
    }
}

在每个ListBox项中添加Name属性

Ok想明白了。我只需要捕捉System.Windows.Input.MouseButtonEventArgs。然后很简单:

private void StationsListLB_PreviewMouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
    var item = ItemsControl.ContainerFromElement(StationsListLB, e.OriginalSource as DependencyObject) as ListBoxItem;
    if (item != null)
    {
        var opa = e.OriginalSource as System.Windows.Controls.Image;
        MessageBox.Show(opa.Tag.ToString());
    }
}