1

Windows 8 アプリで、FlipView の DataTemplate 内のテキストブロックのテキストを変更しようとしています...

私のFlipViewデータテンプレート(簡略化された...):

        <FlipView.ItemTemplate>
            <DataTemplate>
                <TextBlock x:Name="test" />
            </DataTemplate>
        </FlipView.ItemTemplate>

私はこの解決策を試しました: XAML DataTemplate内のコントロールにアクセスするにはどうすればよいですか?

だから私の .cs :

        var _Container = flipView.ItemContainerGenerator.ContainerFromItem(flipView.SelectedItem);

        var _Children = AllChildren(_Container);


         var myTextBlock= _Children.OfType<TextBlock>().FirstOrDefault(c => c.Name.Equals("test"));

         myTextBlock.Text = "test";

メソッドで:

    public List<Control> AllChildren(DependencyObject parent)
    {
        var _List = new List<Control>();
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            var _Child = VisualTreeHelper.GetChild(parent, i);
            if (_Child is Control)
                _List.Add(_Child as Control);
            _List.AddRange(AllChildren(_Child));
        }
        return _List;
    }

しかし、「{"オブジェクト参照がオブジェクトのインスタンスに設定されていません。"}」という NullReferenceException エラーが発生するため、テキストブロックが見つかりません...

ありがとう

4

1 に答える 1

0

こんにちは友人私はあなたのコードをチェックしました..そして私が見つけたのは非常に目立たない間違いです..それはControlキーワードに関するものです..実際には、それはあなたのフリップビューで検索したいコントロールのタイプです..テキストブロック、テキストボックスなど. ..AllChilderen 関数をこのように変更するだけで、すべて正常に動作します..

public List<TextBlock> AllChildren(DependencyObject parent)
    {
        var _List = new List<TextBlock>();
        int j = VisualTreeHelper.GetChildrenCount(parent);
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
        {
            var _Child = VisualTreeHelper.GetChild(parent, i);
            if (_Child is TextBlock)
                _List.Add(_Child as TextBlock);
            _List.AddRange(AllChildren(_Child));
        }
        return _List;
    }

それがあなたを助けることを願っています..

于 2013-07-23T08:13:56.583 に答える