1

我正在为游戏创建一个聊天窗口,并且我正在为 UI 使用 WinRT XAML。

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 将具有 Text 属性以及 Brush。
  3. 将您的 ListView 的 ItemTemplate 设置为下面的模板

    <DataTemplate>
        <TextBlock Text={Binding Text} Foreground="{Binding Brush}" />
    </DataTemplate>
    
  4. 当您将新项目添加到您的收藏时 - 它会自动出现在 ListView 中。

  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 回答