Windowsストアアプリ入門 vol72:FlipViewのFlipViewItemを操作する

土曜日 , 6, 10月 2012 Leave a comment

 FlipViewの一つ一のアイテムの表示したいときがあります。

 データバィンディングを用いて中身のデータを変えるようなケースだとバインド対象のデータを変更すればよいのですが、特定のページだけTextBlockにUIContainerを追加したい場合などにはアイテムのテンプレートを取得して操作したくなります。

 

 このような場合に特定のテンプレートを取得したい場合は以下のコードで取得できます。

 

// FlipViewコントロールから現在表示中のItemを取得する
var flipViewItem = this.flipView.ItemContainerGenerator.ContainerFromIndex(this.flipView.SelectedIndex);

 

 (ただしSelectionChangedイベントの一回目では取得できなかったりと、上記コードでnullが返るケースがあったので注意。コントロールのバグだと思うんだけど・・・)

 

 FlipViewItemが取得できたら、ほしい要素をツリーから取得します。

 ツリーからの取得はWindows Phoneでもお世話になったFindFirstElementInVisualTreeメソッドが利用できます。

 FindFirstElementInVisualTreeメソッドのコードは以下、

 

private T FindFirstElementInVisualTree<T>(DependencyObject parentElement) where T : DependencyObject
{
    var count = VisualTreeHelper.GetChildrenCount(parentElement);
    if (count == 0)
        return null;

    for (int i = 0; i < count; i++)
    {
        var child = VisualTreeHelper.GetChild(parentElement, i);

        if (child != null && child is T)
        {
            return (T)child;
        }
        else
        {
            var result = FindFirstElementInVisualTree<T>(child); 
            if (result != null)
                return result;

        }
    }
    return null;
}

 

 FindFirstElementInVisualTreeを以下のような感じで使います。下はRitchTextBlockを取得する場合。

 

 RichTextBlock tmp_ritchTextBlock = FindFirstElementInVisualTree<RichTextBlock>(flipViewItem);

 

参考:How to access a Control placed inside ListBox ItemTemplate in WP7


Please give us your valuable comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です