以编程方式突出显示Universal Windows 10中的ListView元素

时间:2016-04-14 09:10:38

标签: c# listview win-universal-app

我正在尝试在选择列表元素行为时实现自己的逻辑。我想按位置以编程方式突出显示一个选项。我找到了一个有效的解决方案:

myListView.SelectedIndex = position;

这个方法是对该列表项进行“虚拟点击”,我只需要以编程方式证明列表项,但不要点击它。

我在xaml中的listView实现:

<ListView
    x:Name="myListView"
    SelectionChanged="onmyListViewItemClick"
    SelectionMode="Single">

    <ListView.ItemTemplate>
        <DataTemplate>
            <--here I have 2 textBoxes and one image-->
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

2 个答案:

答案 0 :(得分:1)

只是为了清理事情:

  

ItemClick 在列表视图中的项目收到交互并且IsItemClickEnabled属性为true时发生。 (继承自ListViewBase)

     

SelectionChanged 当前所选项目发生更改时发生。 (继承自Selector)

因此,在您的情况下,您应该在xaml中使用ItemClick="onmyListViewItemClick"并继续使用myListView.SelectedIndex = position;四个您的需求

所以,你的xaml ListView shuold是:

<ListView
x:Name="myListView"
IsItemClickEnabled="true"
ItemClick="onmyListViewItemClick"
SelectionMode="Single">

<ListView.ItemTemplate>
    <DataTemplate>
        <--here I have 2 textBoxes and one image-->
    </DataTemplate>
</ListView.ItemTemplate>

以及在onmyListViewItemClick中获取触发元素:

 private void onmyListViewItemClick(object sender, ItemClickEventArgs e) {
        var selectedOption = (YourObjectElement)e.ClickedItem;
        //use your cliked obj data
 }

答案 1 :(得分:1)

要更改突出显示的元素而不触发SelectionChanged事件,您必须为ListViewItem实现自己的可视状态,并且IsSelected属性不得更改SelectedIndex

要实施选择状态,请先在UserControl内创建一个DataTemplate。为您的模型创建一个新属性bool IsSelected,在用户控件中,您将声明单元格的VisualState,并且只要DataContext的IsSelected属性(您的VisualStateManager,它将更改状态模型)用户控件发生了变化。