以编程方式选择带有突出显示的wpf数据网格行

本文关键字:wpf 数据 数据网 网格 显示 方式 编程 选择 | 更新日期: 2023-09-27 18:01:31

我在WPF中创建了一个包含几行的数据网格。为了在行之间导航,我在wpf网格上创建了四个按钮:[<<]—[<]—[>]—[>>]

我使用SelectedItem函数来设置行。我的问题是,高亮显示似乎不好(慢)出现(这有点难以解释)。

当我使用键盘箭头(向上和向下)以在行之间切换时,高亮显示是快速而直接的。我的代码在我的按钮后面,高亮显示有点慢和奇怪。

这是我的代码

        private void Button_Click_Goto_Premier(object sender, RoutedEventArgs e)
    {
        myDataGridEvtCode.SelectedItem = myDataGridEvtCode.Items[0];
        myDataGridEvtCode.Focus();
    }
    private void Button_Click_Goto_Precedent(object sender, RoutedEventArgs e)
    {
        if (myDataGridEvtCode.SelectedIndex > 0)
        {
            myDataGridEvtCode.SelectedItem = myDataGridEvtCode.Items[myDataGridEvtCode.SelectedIndex - 1];
            myDataGridEvtCode.Focus();
        }
    }
    private void Button_Click_Goto_Suivant(object sender, RoutedEventArgs e)
    {
        if (myDataGridEvtCode.SelectedIndex < myDataGridEvtCode.Items.Count - 1)
        {
            myDataGridEvtCode.SelectedItem = myDataGridEvtCode.Items[myDataGridEvtCode.SelectedIndex + 1];
            myDataGridEvtCode.Focus();
        }
    }
    private void Button_Click_Goto_Dernier(object sender, RoutedEventArgs e)
    {
        myDataGridEvtCode.SelectedItem = myDataGridEvtCode.Items[myDataGridEvtCode.Items.Count-1];
        myDataGridEvtCode.Focus();
    }

有人有什么想法吗?

非常感谢我的朋友们:)

以编程方式选择带有突出显示的wpf数据网格行

我假设您使用System.Windows.Control.DataGrid。我没有试过你的代码。下面是一些代码,我只是把它们放在一个示例WPF应用程序中。通过按下按钮进行选择的工作方式与用鼠标/键盘手动选择行一样流畅。

XAML

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <DataGrid x:Name="MyGrid" Height="200"/>
        <Button Content="Previous" Click="Previous"/>
        <Button Content="Next" Click="Next"/>
    </StackPanel>
</Window>

背后的代码
namespace WpfApplication3
{
    public class Person
    {
        public Person(string firstName, string lastName)
        {
            FirstName = firstName;
            LastName = lastName;
        }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
            var persons = new List<Person>
                {
                    new Person("Steve", "Jobs"),
                    new Person("Bill", "Gates"),
                    new Person("Dan", "Brown"),
                    new Person("Barack", "Obama")
                };
            MyGrid.ItemsSource = persons;
        }
        private void Next(object sender, RoutedEventArgs e)
        {
            MyGrid.Focus();
            int nextIndex = MyGrid.SelectedIndex + 1;
            if (nextIndex > MyGrid.Items.Count - 1) return;
            MyGrid.SelectedIndex = nextIndex;
        }
        private void Previous(object sender, RoutedEventArgs e)
        {
            MyGrid.Focus();
            int previousIndex = MyGrid.SelectedIndex - 1;
            if (previousIndex < 0) return;
            MyGrid.SelectedIndex = previousIndex;
        }
    }
}

处理索引可能是线索。虽然我还没有找到证据,