5

私は を持ってTreeViewHierarchicalDataTemplateます。項目は正しく入力されていますが、TreeView項目をクリックできません。(1つを選択できないため、青色でマークされています)。の前をクリックするTreeViewItemと、選択したものが青色でマークされます。クリックできる小さなボックスがあるようですが、残りはありません。

これが私のコードです:

XAML:

<TreeView ItemsSource="{Binding Main.TreeItems}">
    <TreeView.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
            <TreeViewItem Header="{Binding Path=Header}"/>
        </HierarchicalDataTemplate>
    </TreeView.ItemTemplate>
</TreeView>

モデル

public class ITreeItem
{
    public string Header { get; set; }
    public List<ITreeItem> Children { get; set; } 
}

class MainModel : INotifyPropertyChanged
{
    private List<ITreeItem> _treeitems;

    public MainModel()
    {
        _treeitems = new List<ITreeItem>();

        List<ITreeItem> treeList = new List<ITreeItem>();

        ITreeItem myItem1 = new ITreeItem();
        myItem1.Header = "Test1";
        myItem1.Children = new List<ITreeItem>();
        treeList.Add(myItem1);

        myItem1.Header = "Test2";
        myItem1.Children = new List<ITreeItem>();
        treeList.Add(myItem1);

        TreeItems = treeList;          
    }

    public List<ITreeItem> TreeItems
    {
        get
        {
            return _treeitems;
        }
        set
        {
            _treeitems = value;
            OnPropertyChanged("TreeItems");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;

        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}
4

2 に答える 2

12

XAML では、 の<TreeViewItem>下で を使用する代わりにHierarchicalDataTemplate、 などの別のコントロールを使用してみてくださいTextBlock

<TextBlock Text="{Binding Path=Header}"/>
于 2013-02-14T14:57:45.707 に答える
-1

前の解決策は問題を回避します。ヘッダーを使用して a を選択する方法がありますTreeViewItem。MSDN Web サイトで、ヘッダーを使用する例とクリック可能な場所を見つけることができます。TreeViewItemここでそれが不可能な理由を誰かが知っていますか?

私は個人的に on アイテムをMouseButtonEventHandler追加してそれをハックしましたが、それは汚いです。foreachisSelected = false;((TreeViewItem)sender).IsSelected = true;

于 2013-07-02T07:48:52.107 に答える