C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: WPFのTreeViewで任意の項目を展開する


(過去ログ 49 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■26563 / inTopicNo.1)  WPFのTreeViewで任意の項目を展開する
  
□投稿者/ うどん (4回)-(2008/10/14(Tue) 14:39:23)

分類:[.NET 全般] 

VC#2008 WPFアプリケーション

<TreeView Name="treeView">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type c:MyItem}" ItemsSource="{Binding SubItems}">
            <StackPanel Orientation="Horizontal">
                <Rectangle Width="16" Height="16" Fill="Blue" />
                <Label Content="{Binding Name}" />
            </StackPanel>
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>


class MyItem
{
    public string Name { get; set; }
    public List<MyItem> SubItems { get; private set; }

    public MyItem(string name)
    {
        this.Name = name;
        this.SubItems = new List<MyItem>();
    }
}


MyItem item1 = new MyItem("あああ");
MyItem item2 = new MyItem("いいい");
MyItem item3 = new MyItem("ううう");
MyItem item4 = new MyItem("えええ");

item1.SubItems.Add(item2);
item1.SubItems.Add(item3);
item3.SubItems.Add(item4);
this.treeView.ItemsSource = Enumerable.Repeat(item1, 1);


ツリービューの項目を展開する場合はTreeViewItem.IsExpandedをtrueにすればいいようですが
上記のように項目がTreeViewItemで無い場合はIsExpandedが使えません。
例えばitem3の項目を展開したい場合はどうすればいいのでしょうか。

引用返信 編集キー/
■26565 / inTopicNo.2)  Re[1]: WPFのTreeViewで任意の項目を展開する
□投稿者/ Hongliang (301回)-(2008/10/14(Tue) 16:05:48)
http://msdn.microsoft.com/ja-jp/library/bb613579.aspx
この辺ですか。
引用返信 編集キー/
■26576 / inTopicNo.3)  Re[2]: WPFのTreeViewで任意の項目を展開する
□投稿者/ うどん (5回)-(2008/10/14(Tue) 21:28:25)
No26565 (Hongliang さん) に返信
> http://msdn.microsoft.com/ja-jp/library/bb613579.aspx
> この辺ですか。

ルート項目はTreeView.ItemContainerGenerator.ContainerFromItemでTreeViewItemが取れましたが
サブ項目のTreeViewItemは取れないようです。
ルートから辿って行こうとしても、サブ項目が一度も開かれてない状態だと
ItemContainerGenerator.StatusがNotStartedになっていてContainerFromItemが機能せず
目的のTreeViewItemまでたどり着けませんでした。

いろいろ試してみたところ、TreeViewItem.IsExpandedにMyItem.IsExpandedをバインドすることで
展開を制御することができました。

<Style TargetType="TreeViewItem">
    <Setter Property="IsExpanded" Value="{Binding Path=IsExpanded, Mode=TwoWay}" />
</Style>

class MyItem : INotifyPropertyChanged
{
    public bool IsExpanded { … }
  …
}

こんなやり方でいいのか分かりませんが、一応解決しました。
ありがとうございました。

解決済み
引用返信 編集キー/
■26578 / inTopicNo.4)  Re[3]: WPFのTreeViewで任意の項目を展開する
□投稿者/ Hongliang (302回)-(2008/10/15(Wed) 00:39:40)
ありゃ、そうだったんですか。適当なこと言っちゃってすいませんでした。
ListBox でやって巧くいった記憶からついそのまま TreeView にも適用可能だと早とちりしてしまいました。
http://blog.quantumbitdesigns.com/tag/treeview/
http://www.codeproject.com/KB/WPF/TreeView_SelectionWPF.aspx
皆さんちょっと苦労してらっしゃるようで。

ご指摘の通り、バインディングで済むならそれが一番楽でしょうねー。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -