1

私はWPFの初心者です。リストボックスを持つ WPF UserControl アプリケーションを開発しました。リストボックスの高さは、垂直スクロール バーを取得するためだけに 400 に制限されています。このリストボックスには、100 を超える項目があります。これらのアイテムごとに、現在のマウスポインターの下にあるリストボックス内のアイテムのインデックスが必要なツールチップを表示する必要があります。そのため、MouseEnter のような MouseOver イベントを追加しました。

これが私のXamlコードのスニペットです

<ListBox Name="AllProjects" TabIndex="0" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Visible" Height="400" MouseEnter="AllProjects_MouseEnter"> </ListBox>

これがバックエンドの C# コードです

 private void AllProjects_MouseEnter(object sender, MouseEventArgs e)
    {
        Point Position = e.GetPosition((IInputElement)sender); 
    }

したがって、現在のリストボックスでマウスポインターの位置を取得していますが、実際の問題は、この位置をリストボックス内のアイテムのインデックスに変換することです。System.Windows.Forms.listboxではなくsystem.windows.control.listboxを使用しているため、 IndexFromPointメソッドがありません 。私のリストボックスは垂直にスクロールできるので、インデックスを取得するロジックを開発しようとすると、面倒になります。この場合、listboxitem インデックスを取得する簡単な方法があるかどうかを知りたかっただけです。AllProjectsは私のリストボックスの名前です。前もって感謝します。

4

2 に答える 2

1

MouseEnter イベントを使用する代わりに、SelectionChanged イベントをフックする必要があります。次に、ListBox から SelectedIndex プロパティを介して項目のインデックスを取得します。

XAML:

<ListBox Name="AllProjects" SelectionChanged="AllProjects_SelectionChanged" />

C#:

private void AllProjects_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    int index = this.AllProjects.SelectedIndex;
}

しかし、これは現在の目標を達成するための非常に「手っ取り早い」方法です。本当に WPF を使いたい場合は、Windows フォームなどの他の UI フレームワークで使用した手法のほとんどを忘れて、WPFデータバインディングの機能とXAML データ テンプレートの美しさについて学び始めてください。

于 2013-03-22T12:52:50.727 に答える