1

ゲーム用のチャットウィンドウを作成しており、UIにWinRTXAMLを使用しています。

1.スクロール可能で多色のテキストを処理できるようにチャットウィンドウを設計する最も効率的な方法は何ですか?少なくとも、各線は別々の色にすることができるはずです。現時点では、次のような単純なものがあります。

<ScrollViewer x:Name="chatViewScroller" Height="201" Width="475">
    <StackPanel x:Name="chatViewContent" />
</ScrollViewer>

そして、必要に応じて新しいTextBlockを作成し、それらを子としてchatViewContentに追加します。これは非常に非効率的な方法のようです。

2.新しいテキスト行を追加するときに、自動的に最後までスクロールするようにスクローラーを更新するにはどうすればよいですか?

4

1 に答える 1

2

ListViewを使用したほうがよいでしょう。

  1. ListViewのItemsSourceプロパティをObservableCollectionに設定します。
  2. MessageViewModelには、BrushだけでなくTextプロパティもあります。
  3. ListViewのItemTemplateを以下のテンプレートに設定します

    <DataTemplate>
        <TextBlock Text={Binding Text} Foreground="{Binding Brush}" />
    </DataTemplate>
    
  4. コレクションに新しいアイテムを追加すると、リストビューに自動的に表示されます。

  5. スクロールして表示するには、次のように呼び出します

    await Task.Delay(100);
    MyListView.ScrollIntoView(MyListView.Items[MyListView.Items.Count - 1]);
    

    ListViewが新しいアイテムを追加するのを待つために遅延が必要です。

たとえば、WinRT XAML Toolkitを確認できます。具体的には、 ListViewExtensionsTestPage:です。

    private async void AddItem(object sender, RoutedEventArgs e)
    {
        var vm = (ListViewExtensionsTestViewModel)this.DataContext;
        vm.MyItems.Add(Guid.NewGuid().ToString());

        // Need to wait for the ListView to update
        await Task.Delay(100);

        SourceListView.ScrollToBottom();
        //SourceListView.ScrollIntoView(SourceListView.Items[SourceListView.Items.Count - 1]);
    }
于 2012-05-03T19:13:47.013 に答える