Как создать невыбираемый TreeViewItem в WPF - PullRequest
4 голосов
/ 01 мая 2010

Я связываю TreeView. Моя причина в том, что уровень 0 дерева не выбирается. Когда я щелкаю древовидный элемент уровня 0, текущий элемент должен быть свернут и должен быть выбран первый дочерний элемент.

├ Item 1   //<- level 0. this item must be unselectable
├─ Child Item 11 //<- level 1
├─ Child Item 12
├ Item 2   //<- level 0. When i click this item, that is automatically collapse
├─ Child Item 21
├─ Child Item 22

Как это сделать, используя стиль?

1 Ответ

7 голосов
/ 01 мая 2010

Я бы сделал это в моей модели зрения. Модель представления для предметов уровня 0 будет иметь:

public bool IsSelected
{
    get { return false; }
    set
    {
        // error checking is omitted
        Children[0].IsSelected = value;

        // let WPF know that IsSelected may have changed from what it's expecting
        this.Dispatcher.BeginInvoke((ThreadStart)delegate
        {
            this.OnPropertyChanged(() => this.IsSelected);
        });
    }
}

Ваш XAML будет выглядеть так:

<TreeView>
    <TreeView.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
            <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>

Теперь, когда пользователь нажимает на элемент первого уровня, виртуальная машина будет отказываться от выбора и вместо этого выбирает свой первый дочерний элемент.

Вы можете использовать точно такую ​​же технику, чтобы справиться с вашими требованиями на всех уровнях.

...