列表项选择—如何在列表框中选中的项上显示标记图像

本文关键字:列表 显示 图像 选择 | 更新日期: 2023-09-27 18:09:09

我有一个列表框,我必须在选中的项目上显示一个勾号。我试过这个代码

列表框

 <ListBox Height="691" HorizontalAlignment="Left" Name="listBox1" Margin="-12,71,0,0" VerticalAlignment="Top" Width="480" SelectionChanged="listBox1_SelectionChanged">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border BorderThickness="0,1,0,0" BorderBrush="#FFC1BCBC" Width="490">
                        <Grid Height="70">
                            <TextBlock
                            Name="clients"
                            Margin="10,12,0,0"
                            Text="{Binding Name}" FontSize="24" FontWeight="SemiBold" Foreground="Black"></TextBlock>
                            <Image Height="30" Width="30"
                           HorizontalAlignment="Left" 
                           Name="imageTick" 
                           Stretch="Fill" 
                           VerticalAlignment="Center" 
                           Source="{Binding strAccountSelectedTickPath}"
                           Margin="380,0,0,0" Visibility="Collapsed"/>
                        </Grid>
                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

xaml.cs

 private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        string clientId="";
        if (listBox_1.SelectedIndex >= 0)
        {

            (Application.Current as App).obj_subnodes = newlist[listBox1.SelectedIndex];
            if ((Application.Current as App).obj_subnodes.strAccountSelectedTickPath==""||(Application.Current as App).obj_subnodes.strAccountSelectedTickPath==null)
            {
                    if ( (Application.Current as App).obj_subnodes.strAccountSelectedTickPath = "")
                    {
                         (Application.Current as App).obj_subnodes.strAccountSelectedTickPath = "/sprinklr;component/Images/IsSelected.png";}
else{ (Application.Current as App).obj_subnodes.strAccountSelectedTickPath = ""; }
                initializeListBox();
            }
            NavigationService.Navigate(new Uri("/Home.xaml, UriKind.Relative));
        }
    }
 private void initializeListBox()
    {
        listBox1.ItemsSource = "";
        listBox1.ItemsSource = newlist;
    }

,但问题是假设如果我有两个项目在列表框中说item1和item2,第一次我选择item1和item1上显示的勾号标记,之后我选择了item2和item2上显示的勾号标记,但item1上的勾号标记没有消失。我必须显示一个tick标记来指示所选项目,也就是说,我想tick图像显示在我点击的项目上。有什么解决办法吗?是否有任何选项可以获得列表框内的tick图像的控制访问权限。如果有选项,我可以使用imagetick.visibility=visibility.collapse。但我找不到这样的选择。有什么解决办法吗?请帮助我

列表项选择—如何在列表框中选中的项上显示标记图像

实现这一点的最佳方法是更改ListBoxItem的样式/模板,以便当它处于'selected'状态时,显示一个tick图像。

您需要创建一个Style,将Template设置为ListBoxItem,并在每个项目中添加您的tick映像。有关如何做到这一点的详细信息,请参阅下面的博客文章。您可以通过设置ItemContainerStyle .

将此样式应用于ListBox

要根据选择打开/关闭标记,您需要将VisualState添加到ListBoxItem模板中,这在这篇博客文章中有描述。

下载最新的Silverlight Toolkit for Windows Phone(或通过NuGet安装)并使用MultiselectList而不是常规的ListBox。MultiselectList支持为匹配邮件客户端的功能而设计的复选框。