1

次の問題があります。

私の TreeView では、ユーザーが TreeView ではなく TreeViewItem をクリックしたときに、独自の deselect() メソッドを呼び出して、選択解除機能を追加しました。ここに私の TreeView メソッドがあります:

public void deselectAll()
{
    TreeViewItem item = SelectedItem as TreeViewItem;
    if (item != null)
    {
        this.Focus();
        item.IsSelected = false;
    }
}

私の問題は、選択を解除した後に TreeViewItem を再選択できないことです。TreeView 自体に焦点を合わせるとこの問題は解決するはずですが、そうではありません。また、「Focus()」を「IsSelected = false」の前後に配置しても問題ありません。

なぜこれが機能しないのか、誰にも分かりますか? 任意の考えをいただければ幸いです。

4

1 に答える 1

3

item.IsSelected = false; を設定した後。ツリービューに対して .Focus() を呼び出す必要があります。

        <TreeView MouseLeftButtonDown="TreeView_MouseLeftButtonDown">
            <TreeViewItem Header="Employee1">
                <TreeViewItem Header="Jesper"/>
                <TreeViewItem Header="Aaberg"/>
                <TreeViewItem Header="12345"/>
            </TreeViewItem>
            <TreeViewItem Header="Employee2">
                <TreeViewItem Header="Dominik"/>
                <TreeViewItem Header="Paiha"/>
                <TreeViewItem Header="98765"/>
            </TreeViewItem>
        </TreeView>

    private void TreeView_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        var tv = sender as TreeView;

        if (tv != null)
        {
            var item = (TreeViewItem)tv.SelectedItem;
            item.IsSelected = false;
            tv.Focus();
        }
    }

あなたは focus() を書いて問題を解決しません。どこで deselectAll() を呼び出しますか?

回避策として、MouseLeftDown を使用して項目を選択済みとして設定できます。

ps: 回答をアンサーとしてマークすることを忘れないでください。

于 2011-03-22T10:47:55.710 に答える