9

プログラムでListBoxアイテムを選択した後、選択範囲を移動するには、下/上キーを2回押す必要があります。助言がありますか?

意見:

<ListBox Name="lbActions" Canvas.Left="10" Canvas.Top="10"
               Width="260" Height="180">
        <ListBoxItem Name="Open" IsSelected="true" Content="Open"></ListBoxItem>
        <ListBoxItem Name="Enter" Content="Enter"></ListBoxItem>
        <ListBoxItem Name="Print" Content="Print"></ListBoxItem>
</ListBox>

コード:

public View()
{
   lbActions.Focus();
   lbActions.SelectedIndex = 0; //not helps
   ((ListBoxItem) lbActions.SelectedItem).Focus(); //not helps either
}
4

3 に答える 3

13

ListBox にフォーカスを設定しないでください...選択した ListBoxItem にフォーカスを設定します。これにより、「2回のキーボードストロークが必要」の問題が解決されます。

if (lbActions.SelectedItem != null)
    ((ListBoxItem)lbActions.SelectedItem).Focus();
else
    lbActions.Focus();

ListBox に s 以外のものが含まれている場合はListBoxItem、 を使用lbActions.ItemContainerGenerator.ContainerFromIndex(lbActions.SelectedIndex)して、自動的に生成された を取得できますListBoxItem


これをウィンドウの初期化中に発生させたい場合はLoaded、コンストラクターではなくイベントにコードを配置する必要があります。例 (XAML):

<Window ... Loaded="Window_Loaded">
    ...
</Window>

コード(質問の例に基づく):

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        lbActions.Focus();
        lbActions.SelectedIndex = 0;
        ((ListBoxItem)lbActions.SelectedItem).Focus();
    }
于 2010-02-08T18:38:59.757 に答える
1

これは、XAML でも簡単に実行できます。これは論理フォーカスのみを設定することに注意してください。

例えば:

<Grid FocusManager.FocusedElement="{Binding ElementName=itemlist, Path=SelectedItem}">
    <ListBox x:Name="itemlist" SelectedIndex="1">
        <ListBox.Items>
            <ListBoxItem>One</ListBoxItem>
            <ListBoxItem>Two</ListBoxItem>
            <ListBoxItem>Three</ListBoxItem>
            <ListBoxItem>Four</ListBoxItem>
            <ListBoxItem>Five</ListBoxItem>
            <ListBoxItem>Six</ListBoxItem>
        </ListBox.Items>
    </ListBox>
</Grid>
于 2011-09-20T12:27:46.317 に答える