0

リストビューがあり、データベースの顧客データをバインドします。彼らの最初のキャラクターに集中したいです。たとえば、キーボードから「B」をクリックすると、名前の最初の文字が「B」である顧客にハイライトフォーカスを移動する必要があります。何か考えはありますか?私のリストビューのXAMLは以下のとおりです。

<ListView x:Name="datalist" ButtonBase.Click="datalist_Click" ContextMenuOpening="datalist_ContextMenuOpening" MouseDoubleClick="datalist_MouseDoubleClick" SelectionChanged="datalist_SelectionChanged"
MouseUp="datalist_MouseUp" PreviewMouseUp="datalist_PreviewMouseUp" > 
4

2 に答える 2

0

ここでコードを使用し、textbox _TextChanged イベントの代わりに Window_Keydown イベントを使用して、押されたキーをキャプチャできます。

これの代わりに:

private void textboxsearch_TextChanged(object sender, TextChangedEventArgs e)
{
    FilterItems(listPerson, textBoxSearch.Text);
}

これを使って:

private void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
    FilterItems(listPerson, e.Key.ToString());
}
于 2012-11-07T09:21:41.123 に答える
0

ListView がフォーカスを取得したら、次のように Listview に動作をアタッチできます。

(System.Windows.Interactivity参照する必要があります) Xaml:

<ListView SelectionMode="Multiple">
            <ListViewItem>A Company 1</ListViewItem>
            <ListViewItem>A Company 2</ListViewItem>
            <ListViewItem>A Company 3</ListViewItem>
            <ListViewItem>B Company 1</ListViewItem>
            <ListViewItem>B Company 2</ListViewItem>
            <ListViewItem>C Company 1</ListViewItem>
            <ListViewItem>C Company 2</ListViewItem>
            <ListViewItem>C Company 3</ListViewItem>
            <ListViewItem>D Company 1</ListViewItem>
            <ListViewItem>D Company 2</ListViewItem>
            <ListViewItem>E Company 1</ListViewItem>
            <ListViewItem>F Company 1</ListViewItem>
            <i:Interaction.Behaviors>
                <ListBoxHighlighting:ListViewBehavior />
            </i:Interaction.Behaviors>
        </ListView>

行動:

 public class ListViewBehavior : Behavior<ListView>
    {
        protected override void OnAttached()
        {
            AssociatedObject.KeyDown += OnKeyDown;
        }

        protected override void OnDetaching()
        {
            AssociatedObject.KeyDown -= OnKeyDown;
        }

        private void OnKeyDown(object sender, KeyEventArgs e)
        {
            var key = e.Key.ToString();

            AssociatedObject.SelectedItems.Clear();

            foreach (var item in AssociatedObject.Items)
            {
                var i = (item as ListViewItem).Content;
                if(i.ToString().StartsWith(key))
                {
                    AssociatedObject.SelectedItems.Add(item);
                }

            }
        }
    }
于 2012-11-07T12:35:08.343 に答える