首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ListViewItem焦点

ListViewItem焦点
EN

Stack Overflow用户
提问于 2016-10-13 20:19:53
回答 2查看 1.3K关注 0票数 0

使用MVVM:

代码语言:javascript
复制
<ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" ... />

ViewModel:

代码语言:javascript
复制
public class Item: INotifyPropertyChanged { ... }

public ObservableCollection<Item> Items { get; set; }

public Item SelectedItem { get; set; }

现在如果我更改了SelectedItem

代码语言:javascript
复制
// change
Items = new ObservableCollection<Item>(...);
SelectedItem = Items.FirstOrDefault(item => ... some condition);
// notify view
OnPropertyChanged();
OnPropertyChanged(nameof(SelectedItem));

然后想要的项目被适当地选择,但它没有被聚焦。使用键盘导航如果我以某种方式将焦点放在ListView上,那么第一个项目就会被选中并获得焦点。

如何给SelectedItem焦点?

EN

回答 2

Stack Overflow用户

发布于 2016-10-14 00:33:19

就我个人而言,我更喜欢将我的控件的行为逻辑放在控件的代码中。我的意思是扩展标准控件,以便以我需要的方式改变它们的行为。

首先,我需要扩展ListViewItem控件:

代码语言:javascript
复制
namespace Sample
{
    public class ListViewItem : System.Windows.Controls.ListViewItem
    {
        protected override void OnSelected(RoutedEventArgs e)
        {
            base.OnSelected(e);

            if (IsSelected)
            {
                Focus();
            }
        }
    }
}

然后我需要一个使用我的ListViewItemListView控件

代码语言:javascript
复制
namespace Sample
{
    public class ListView : System.Windows.Controls.ListView
    {
        protected override DependencyObject GetContainerForItemOverride()
        {
            return new ListViewItem();
        }
    }
}

所以我的XAML将变成:

代码语言:javascript
复制
<local:ListView ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}" ... />

我希望它能帮助你。

票数 1
EN

Stack Overflow用户

发布于 2016-10-13 21:34:36

一种可能是当ListView具有焦点时,自动聚焦选定的ListViewItem

xaml:

代码语言:javascript
复制
<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <EventSetter Event="Selected" Handler="ListViewItem_Selected" />
    </Style>
</ListView.ItemContainerStyle>

查看cs:

代码语言:javascript
复制
void ListViewItem_Selected(object sender, RoutedEventArgs e) 
{
    if (listView.IsFocused)
        (e.Source as ListViewItem)?.Focus();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40020832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档