C# XAML中类似控制台的消息框

C# XAML中类似控制台的消息框,c#,wpf,visual-studio,xaml,C#,Wpf,Visual Studio,Xaml,如何在WPF中创建类似的内容?我可以在一个框中显示文字信息,较旧的信息会移向顶部而不是消失。有点像聊天。 它不需要与滚动条花哨,我只需要一个消息框,有能力显示多个文字信息。创建消息的时间很方便,但不是必需的。您可以将windows用作对话框,并从该对话框将消息绑定到listview。我制作了一个示例应用程序,向您演示了如何做到这一点。这只是一个示例,向您展示非常基本的消息传递应用程序。请勿在生产中使用此功能 主窗口示例: <Window x:Class="Messaging.MainWin

如何在WPF中创建类似的内容?我可以在一个框中显示文字信息,较旧的信息会移向顶部而不是消失。有点像聊天。
它不需要与滚动条花哨,我只需要一个消息框,有能力显示多个文字信息。创建消息的时间很方便,但不是必需的。

您可以将windows用作对话框,并从该对话框将消息绑定到listview。我制作了一个示例应用程序,向您演示了如何做到这一点。这只是一个示例,向您展示非常基本的消息传递应用程序。请勿在生产中使用此功能

主窗口示例:

<Window x:Class="Messaging.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Messaging"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
            <TextBox Name="txtMessage" Width="200" Height="50" Margin="10" />
            <Button Name="btnSubmit" Content="submit" Width="200" Height="50" Click="btnSubmit_Click" />
        </StackPanel>
    </Grid>
</Window>

我希望这会有所帮助。

我通常只使用
消息的
可观察收集
,我将
项控件绑定到这些对象<代码>消息
具有
时间
文本
属性。该模板仅绑定到
消息
的属性2
TextBlock
。根据需要向集合中添加项,其余的由绑定处理。
using System;
using System.Windows;

namespace Messaging
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            MessageStorage.Messages = new System.Collections.ObjectModel.ObservableCollection<Message>();
        }

        private void btnSubmit_Click(object sender, RoutedEventArgs e)
        {
            Message message = new Message();
            message.MessageContent = txtMessage.Text;
            message.PublishDate = DateTime.Now;

            MessageStorage.Messages.Add(message);

            MessageDialog messageDialog = new MessageDialog(MessageStorage.Messages);
            messageDialog.ShowDialog();
        }
    }
}
<Window x:Class="Messaging.MessageDialog"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Messaging"
        mc:Ignorable="d"
        Title="MessageDialog" Height="300" Width="300">
    <Grid>
        <ListView Name="lvMessages">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding MessageContent}" Margin="0,10,10,0" />
                        <TextBlock Text="{Binding PublishDate}" Margin="0,10,10,0" />
                    </StackPanel>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </Grid>
</Window>
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;

namespace Messaging
{
    /// <summary>
    /// Interaction logic for MessageDialog.xaml
    /// </summary>
    public partial class MessageDialog : Window
    {
        public MessageDialog(ObservableCollection<Message> messages)
        {
            InitializeComponent();
            lvMessages.ItemsSource = messages.OrderByDescending(m => m.PublishDate);
        }
    }
}
using System.Collections.ObjectModel;

namespace Messaging
{
    public static class MessageStorage
    {
        public static ObservableCollection<Message> Messages { get; set; }
    }
}
using System;

namespace Messaging
{
    public class Message
    {
        public string MessageContent { get; set; }
        public DateTime PublishDate { get; set; }
    }
}