相关疑难解决方法(0)

wpf listview失去了焦点

我在WPF中有一些奇怪的ListView控件行为.

我们正在用C#开发应用程序.

我用一些项创建了ListView,并将SelectedIndex设置为列表中间的某个索引.然后我在ListView上的任何位置单击鼠标,然后使用Up/Dows键盘键导航,一切正常.但是,如果我将焦点移动到另一个控件,然后尝试以编程方式将焦点设置回ListView控件,那么我就会遇到问题.

ListView获得焦点,但是当我尝试使用键盘导航时,将取消当前选择并选择第一个项目,导航将从列表中的第一个项目开始.

我通过调用它的.Focus()方法将焦点设置到ListView控件.

它看起来甚至是ListView控件的焦点,但实际上没有项目在焦点上,即使SelectedIndex有一些有效值.

请帮我!如何以编程方式将焦点设置为ListView控件以防止此类行为?

我发现我的listview选择索引与焦点项目不同.谁 ???

在selectedindex_changed事件中,我将所选索引设置为修复项目(5),但是当我按箭头键时,项目已更改.这意味着所选索引固定为5,但当前项目(以其周围的点边框显示)移动到箭头键位置.无论如何,我的选择项固定为5,但我的滚动视图移动到当前项目的位置.

此代码在listView1_SelectionChanged中:listView1.SelectionMode = SelectionMode.Single; listView1.SelectedIndex = 5;

我的listview有一个修改过的视图:

    <l:PlainView x:Key="tileView"
            ItemTemplate="{StaticResource centralTile}"
            ItemHeight="120" ItemWidth="130" />
Run Code Online (Sandbox Code Playgroud)

我不再知道问题了解.

问候

wpf listview

10
推荐指数
1
解决办法
6287
查看次数

WPF:无法设置焦点

我希望在PreviewTextInput处理程序中创建一个新控件并将焦点设置为它.但即使在新控件上调用Focus()之后,光标仍然在旧文本框中.处理程序UserControl_PreviewTextInput在UserControl上注册,如果这很重要,则包含此文本框.

private void UserControl_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
            CodeLineControl el = new CodeLineControl();
            container.Children.Insert(idx+1, el);
            el.innerTextBox.Focus();
}
Run Code Online (Sandbox Code Playgroud)

CodeLineControl定义如下(简化):

<UserControl ..>
    <DockPanel Name="codeline"  Background="AntiqueWhite" >           
         <TextBox Name="innerTextBox"/>      
    </DockPanel>  
</UserControl>
Run Code Online (Sandbox Code Playgroud)

Focus()是否存在一些限制?我不允许将Focus()从PreviewTextInput处理程序中移出TextBox吗?我不能把注意力集中在新创建的元素上吗?

wpf user-interface xaml controls focus

6
推荐指数
2
解决办法
2350
查看次数

如何确保在数据绑定ListBox中没有选择任何项目?

好吧,这必须是一个重复的问题,但我找不到答案:我有一个数据集到数据集的列表框.默认情况下,选择项目[0].我如何防止这种情况,以确保在我单击ListBoxItem时提出SelectionChanged事件?

编辑:我已经解除了SelectedIndex = -1路由,但我再次尝试:在Listbox的构造函数中将SelectedIndex设置为-1(或作为XAML中的属性)不起作用.似乎在初始化之后填充了列表框,并且selectedIndex将在all.Same故事之后变为0,用于将SelectedItem设置为null;

我试过这个:

<ListBox ItemsSource="{Binding Value}" 
         SelectionChanged="ListBox_SelectionChanged"
         IsSynchronizedWithCurrentItem="True"
         Loaded="ListBox_Loaded">
</ListBox>
Run Code Online (Sandbox Code Playgroud)

有:

 private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        if(e.AddedItems.Count==0)return;//Prevents stackoverflow! ;-)
        ((ListBox)e.OriginalSource).SelectedItem=null;
    }

private void ListBox_Loaded(object sender, RoutedEventArgs e)
{
    ((ListBox) sender).SelectedItem = null;
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,但它在列表框显示的项目顶部插入一个空行,这非常难看....在我的特定情况下,我可以通过删除IsSynchronizedWithCurrentItem属性来解决问题.

但我可以想到许多情况,这是不可接受的.

上面的语句是无意义的:要么您想要使用主 - 细节绑定并将IsSynchronizedWithCurrentItem设置为true,要么您不想.您不太可能希望使用主 - 详细信息绑定,然后始终在列表框中没有当前选定的项目

.net wpf listbox selecteditem

4
推荐指数
1
解决办法
5526
查看次数

标签 统计

wpf ×3

.net ×1

controls ×1

focus ×1

listbox ×1

listview ×1

selecteditem ×1

user-interface ×1

xaml ×1