Merge pull request #107 from TorchAPI/patch-96
Proper scrolling and formatting for the ChatPanel.
This commit is contained in:
@@ -10,20 +10,9 @@
|
|||||||
<RowDefinition/>
|
<RowDefinition/>
|
||||||
<RowDefinition Height="Auto"/>
|
<RowDefinition Height="Auto"/>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<ListView Grid.Row="0" x:Name="ChatItems" ItemsSource="{Binding ChatHistory}" Margin="5,5,5,5">
|
<ScrollViewer x:Name="ChatScroller" Grid.Row="0" Margin="5,5,5,5" HorizontalScrollBarVisibility="Disabled">
|
||||||
<ScrollViewer HorizontalScrollBarVisibility="Disabled"/>
|
<TextBlock x:Name="ChatItems" />
|
||||||
<ListView.ItemTemplate>
|
</ScrollViewer>
|
||||||
<DataTemplate>
|
|
||||||
<WrapPanel>
|
|
||||||
<TextBlock Text="{Binding Timestamp}"/>
|
|
||||||
<TextBlock Text=" "/>
|
|
||||||
<TextBlock Text="{Binding Name}" FontWeight="Bold"/>
|
|
||||||
<TextBlock Text=": "/>
|
|
||||||
<TextBlock Text="{Binding Message}"/>
|
|
||||||
</WrapPanel>
|
|
||||||
</DataTemplate>
|
|
||||||
</ListView.ItemTemplate>
|
|
||||||
</ListView>
|
|
||||||
<Grid Grid.Row="1">
|
<Grid Grid.Row="1">
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition/>
|
<ColumnDefinition/>
|
||||||
|
@@ -41,23 +41,32 @@ namespace Torch.Server
|
|||||||
{
|
{
|
||||||
_server = (TorchBase)server;
|
_server = (TorchBase)server;
|
||||||
_multiplayer = (MultiplayerManager)server.Multiplayer;
|
_multiplayer = (MultiplayerManager)server.Multiplayer;
|
||||||
ChatItems.Items.Clear();
|
|
||||||
DataContext = _multiplayer;
|
DataContext = _multiplayer;
|
||||||
|
|
||||||
|
ChatItems.Inlines.Clear();
|
||||||
|
_multiplayer.ChatHistory.ForEach(InsertMessage);
|
||||||
if (_multiplayer.ChatHistory is INotifyCollectionChanged ncc)
|
if (_multiplayer.ChatHistory is INotifyCollectionChanged ncc)
|
||||||
ncc.CollectionChanged += ChatHistory_CollectionChanged;
|
ncc.CollectionChanged += ChatHistory_CollectionChanged;
|
||||||
|
ChatScroller.ScrollToBottom();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ChatHistory_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
private void ChatHistory_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
|
||||||
{
|
{
|
||||||
ChatItems.ScrollToItem(ChatItems.Items.Count - 1);
|
foreach (IChatMessage msg in e.NewItems)
|
||||||
/*
|
InsertMessage(msg);
|
||||||
if (VisualTreeHelper.GetChildrenCount(ChatItems) > 0)
|
}
|
||||||
{
|
|
||||||
|
|
||||||
Border border = (Border)VisualTreeHelper.GetChild(ChatItems, 0);
|
private void InsertMessage(IChatMessage msg)
|
||||||
ScrollViewer scrollViewer = (ScrollViewer)VisualTreeHelper.GetChild(border, 0);
|
{
|
||||||
scrollViewer.ScrollToBottom();
|
bool atBottom = ChatScroller.VerticalOffset + 8 > ChatScroller.ScrollableHeight;
|
||||||
}*/
|
var span = new Span();
|
||||||
|
span.Inlines.Add($"{msg.Timestamp} ");
|
||||||
|
span.Inlines.Add(new Run(msg.Name) { Foreground = msg.Name == "Server" ? Brushes.DarkBlue : Brushes.Blue });
|
||||||
|
span.Inlines.Add($": {msg.Message}");
|
||||||
|
span.Inlines.Add(new LineBreak());
|
||||||
|
ChatItems.Inlines.Add(span);
|
||||||
|
if (atBottom)
|
||||||
|
ChatScroller.ScrollToBottom();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SendButton_Click(object sender, RoutedEventArgs e)
|
private void SendButton_Click(object sender, RoutedEventArgs e)
|
||||||
|
Reference in New Issue
Block a user