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

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

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

Re[9]: WPFのtreeviewとexpandedイベント


(過去ログ 60 を表示中)

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

■34832 / inTopicNo.1)  WPFのtreeviewとexpandedイベント
  
□投稿者/ 倉田 有大 (536回)-(2009/04/10(Fri) 23:06:14)

分類:[.NET 全般] 

2009/04/10(Fri) 23:09:51 編集(投稿者)

立て続けに質問すいません_(__)_
エクスプローラーライクのツリービューをWPFで作成しています。

treeview1.DataContext = Data;

上記のようにデーターをバインドしてしまうと、Expandedイベントを捕まえることは出来ないのでしょうか?

Windows.Formsの場合はTreeViewにOnBeforeExpandイベントがあったのですが、WPFからはTreeViewItemにExpandedイベントが追加されるようになりました。

うーん、イベントが捕まえられませんー

コードプロジェクトの方のエクスプローラーのサンプルThreadedWpfExplorerはTreeViewItemを使って作成しているようなんですよね。
引用返信 編集キー/
■34835 / inTopicNo.2)  Re[1]: WPFのtreeviewとexpandedイベント
□投稿者/ Hongliang (355回)-(2009/04/11(Sat) 00:52:11)
TreeView.ItemContainerStyle で各アイテムのコンテナである TreeViewItem の Style を設定できます。
EventSetter で適当にイベントハンドラを追加してください。
引用返信 編集キー/
■34837 / inTopicNo.3)  Re[2]: WPFのtreeviewとexpandedイベント
□投稿者/ 倉田 有大 (538回)-(2009/04/11(Sat) 02:16:40)
Hongliangさん、素晴らしいヒントをありがとうございます_(__)_

カスタムコントロールのコンストラクタに

  public FLPTreeView()
        {
            Style style = new Style();
            style.TargetType = typeof(TreeViewItem);
            style.Setters.Add(new EventSetter(TreeViewItem.ExpandedEvent, new RoutedEventHandler(a)));
            this.ItemContainerStyle = style;

        }

 public void a(object o, RoutedEventArgs e)
        {
        }

と書くことで、イベントを取得できました。
ググること2時間!

引用返信 編集キー/
■34838 / inTopicNo.4)  Re[3]: WPFのtreeviewとexpandedイベント
□投稿者/ 倉田 有大 (539回)-(2009/04/11(Sat) 02:22:06)
2009/04/11(Sat) 02:40:29 編集(投稿者)
ところで、なぜかXAMLで書こうとするとエラーが出ます。

x:Classを要求されたのですが、

エラー	1	partial 識別子が型 'WPFCustomControl.FLPTreeView' にありません。この型の別の partial 宣言が存在します。

FLPTreeViewは

public class FLPTreeView : TreeView

上記のように宣言しております。

partialを下記のようにつけると

public partial class  FLPTreeView : TreeView

エラー	1	'WPFCustomControl.FLPTreeView' の partial 宣言では、異なる基本クラスを指定してはいけません。

と怒られてしまいます。
さがしてみましたが、他にpartial宣言をしているところがみつかりません。


XAMLの書き方を教えていただければ幸いです。

<ResourceDictionary x:Class="WPFCustomControl.FLPTreeView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WPFCustomControl">

    <HierarchicalDataTemplate DataType="{x:Type local:FLPATHTree}"  
            ItemsSource="{Binding Children}">
        <HierarchicalDataTemplate.ItemContainerStyle>
            <Style TargetType="TreeViewItem">
                <EventSetter Event="Expanded" Handler="a"/>
            </Style>
        </HierarchicalDataTemplate.ItemContainerStyle>
    </HierarchicalDataTemplate>
</ResourceDictionary>


もう2時だー、今日もXAML三昧だったなー

引用返信 編集キー/
■34839 / inTopicNo.5)  Re[4]: WPFのtreeviewとexpandedイベント
□投稿者/ 倉田 有大 (540回)-(2009/04/11(Sat) 03:24:53)
って、リソースだからイベント無理か!

別にXAMLファイルもうひとつ作ってやって、そこに

<FLPTreeView x:Class="WPFCustomControl.FLPTreeView"

って、先頭に書いたらリンクしてくれるのかな。
風呂の中で思いつきました。
やすもー ばたんきゅー
引用返信 編集キー/
■34841 / inTopicNo.6)  Re[5]: WPFのtreeviewとexpandedイベント
□投稿者/ Hongliang (357回)-(2009/04/11(Sat) 06:24:09)
No34839 (倉田 有大 さん) に返信
> って、リソースだからイベント無理か!
というか HierarchicalDataTemplate に ItemContainerStyle なんてプロパティは存在してませんが。
リソース内でもイベントハンドラ指定できますし。

x:Class を飛び越えて ResourceDictionary とか行かれても…。
引用返信 編集キー/
■34842 / inTopicNo.7)  Re[6]: WPFのtreeviewとexpandedイベント
□投稿者/ 倉田 有大 (541回)-(2009/04/11(Sat) 12:44:07)
2009/04/11(Sat) 13:00:10 編集(投稿者)

お返事ありがとうございます。_(__)_

> ■No34839 (倉田 有大 さん) に返信
>>って、リソースだからイベント無理か!
> というか HierarchicalDataTemplate に ItemContainerStyle なんてプロパティは存在してませんが。

http://msdn.microsoft.com/ja-jp/library/system.windows.hierarchicaldatatemplate_properties.aspx
.Net 3.5で追加されたみたいです。

http://msdn.microsoft.com/ja-jp/library/ms754130(VS.80).aspx
2.0の時代にWPFってあったんですね。3.0からと思ってました。

> リソース内でもイベントハンドラ指定できますし。
>
> x:Class を飛び越えて ResourceDictionary とか行かれても…。

って、上見ると書いてませんでた、申し訳ない。カスタムコントロールでした_(__)_
最初にResourceDictionaryが用意されているのです。
ResourceDictionaryにイベントは無理ですよね?

引用返信 編集キー/
■34844 / inTopicNo.8)  Re[7]: WPFのtreeviewとexpandedイベント
□投稿者/ Hongliang (358回)-(2009/04/11(Sat) 13:17:38)
>>というか HierarchicalDataTemplate に ItemContainerStyle なんてプロパティは存在してませんが。
>
> http://msdn.microsoft.com/ja-jp/library/system.windows.hierarchicaldatatemplate_properties.aspx 
> .Net 3.5で追加されたみたいです。
ありゃ、すいません、見落としてました。.NET 3.0SP1 で追加でしたか。
// ローカルの Document Explorer が SP1 分を含んでないのをつい忘れがちです。
ただ一応、そのリンク先に『「子項目の」項目コンテナに適用される』とあるように、ルートノードには適用されませんよ? コード例も参考にしてください。

>>リソース内でもイベントハンドラ指定できますし。
>>
>>x:Class を飛び越えて ResourceDictionary とか行かれても…。
>
> って、上見ると書いてませんでた、申し訳ない。カスタムコントロールでした_(__)_
> 最初にResourceDictionaryが用意されているのです。
> ResourceDictionaryにイベントは無理ですよね?
XAML で記述された ResourceDictionary の partical class にハンドラを記述できます。
x:Class でクラスの完全限定名を記述し、かつソースファイルでそのクラスを ResourceDictionary から派生した partial class として定義します。
// VS を使ってないのでカスタムコントロールに最初から用意されてる ResourceDictionary ってのがどんなものかは知りませんが。
引用返信 編集キー/
■34846 / inTopicNo.9)  Re[8]: WPFのtreeviewとexpandedイベント
□投稿者/ 倉田 有大 (543回)-(2009/04/11(Sat) 15:31:30)
>ただ一応、そのリンク先に『「子項目の」項目コンテナに適用される』とあるように、ルートノードには適用されませんよ? コード例も参考にしてください

あら、そうなんですか、失礼しました。

>XAML で記述された ResourceDictionary の partical class にハンドラを記述できます。
>x:Class でクラスの完全限定名を記述し、かつソースファイルでそのクラスを ResourceDictionary から派生した partial class として定義します。

うわー、全然やり方わからないw
ちょっと気合い入れて調べないと行けないですね。昨日の疲れが残っているので、また夜にでも挑戦します。
引用返信 編集キー/
■34848 / inTopicNo.10)  Re[9]: WPFのtreeviewとexpandedイベント
□投稿者/ 倉田 有大 (544回)-(2009/04/11(Sat) 23:46:32)
2009/04/11(Sat) 23:46:41 編集(投稿者)
ようやく調べられました。

<ResourceDictionary x:Class="WPFCustomControl.CustomTreeViewStyle"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WPFCustomControl">
    

    <HierarchicalDataTemplate DataType="{x:Type local:FLPATHTree}" ItemsSource="{Binding Children}">
        <StackPanel Orientation="Horizontal">
            <Image Source="{Binding ImageSource}" Width="{Binding ImageSize.Width}" Height="{Binding ImageSize.Height}" x:Name="TreeViewImage"/>
            <TextBlock Text="{Binding FLPATH.FileName}"/>   
        </StackPanel>
    </HierarchicalDataTemplate>


    <Style TargetType="{x:Type TreeViewItem}">
        <EventSetter Event="Expanded" Handler="a"/>
    </Style>
</ResourceDictionary>

public partial class CustomTreeViewStyle : ResourceDictionary
{
    public partial class CustomTreeViewStyle : ResourceDictionary
    {
        public void a(object o, RoutedEventArgs e)
        {
            TreeViewItem r = o as TreeViewItem;
            FLPATHTree flpTreeView = r.Header as FLPATHTree;
        }
    }
}

これで取得できましたヽ(´ー`)ノ
Headerに入っているんですね。どこにバインドしたデーターがあるねん!って、捜しまくってしまいました。

Hongliangさん、ありがとうございました。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -