列表项选择 - 如何在列表框中的所选项目上显示刻度图像

时间:2011-09-20 06:38:40

标签: c# windows-phone-7 listbox

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

列表框

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

但问题是假设ifi在列表框中有两个项目,例如item1和item2,并且在第一次我选择了item1和item1上显示的刻度线,之后我选择了item2,而item2上显示了tick marlk。但是item1上的刻度标记不会消失。我必须显示一个刻度标记以指示所选项目,即我希望刻度图像显示在我单击的项目上。是否有任何解决方案。是否有任何选项可以获得控制权访问列表框内的刻度图像。如果有一个选项,我可以使用imagetick.visibility = visibility.collapsed.but我没有找到这样的选项。有任何解决方案,请帮助我

2 个答案:

答案 0 :(得分:1)

实现此目的的最佳方法是更改​​ListBoxItem的样式/模板,以便当它处于“选定”状态时,会显示刻度图像。

您需要创建一个Style,为Template设置ListBoxItem,在每个项目中添加刻度图像。有关如何执行此操作的详细信息,请参阅following blog post。您可以通过设置ListBox

将此样式应用于ItemContainerStyle

要根据选择打开/关闭刻度线,您需要在VisualState模板中添加ListBoxItemthis blog post中对此进行了描述。

答案 1 :(得分:1)

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