0
어떻게 WPF에서이 같은 것을 만들 수 있습니까? 텍스트 메시지를 표시 할 수있는 상자, 오래된 상자는 사라지지 않고 위쪽으로 이동합니다. 채팅 같은 것. 스크롤 막대를 사용하지 않고도 여러 텍스트 메시지를 표시 할 수있는 메시지 상자 만 있으면됩니다. 메시지가 작성된 시간은 편리 할 수 있지만 반드시 필요한 것은 아닙니다.
어떻게 WPF에서이 같은 것을 만들 수 있습니까? 텍스트 메시지를 표시 할 수있는 상자, 오래된 상자는 사라지지 않고 위쪽으로 이동합니다. 채팅 같은 것. 스크롤 막대를 사용하지 않고도 여러 텍스트 메시지를 표시 할 수있는 메시지 상자 만 있으면됩니다. 메시지가 작성된 시간은 편리 할 수 있지만 반드시 필요한 것은 아닙니다.
대화 상자로 창을 사용하고 해당 대화 상자의 목록보기로 메시지를 바인딩 할 수 있습니다. 어떻게 할 수 있는지 보여주기 위해 샘플 어플리케이션을 만들었습니다. 이것은 아주 기본적인 메시징 응용 프로그램을 보여주기위한 샘플 일뿐입니다. 이 제품을 사용하지 마십시오.
MainWindow를 예 : 뒤에
<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>
코드입니다.
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();
}
}
}
메시지 대화 wiew입니다 :
<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);
}
}
}
MessageStorage 클래스 :
using System.Collections.ObjectModel;
namespace Messaging
{
public static class MessageStorage
{
public static ObservableCollection<Message> Messages { get; set; }
}
}
및 finallly 메시지 클래스 :
using System;
namespace Messaging
{
public class Message
{
public string MessageContent { get; set; }
public DateTime PublishDate { get; set; }
}
}
도움이 되었기를 바랍니다.
나는 대개'ItemsControl'을 바인딩하는'Message' 객체의'ObservableCollection'을 사용합니다. 'Message'는'Time'과'Text' 속성을 가지고 있습니다. 템플릿은 단지'Message'의 속성에 바인딩 된'TextBlock' 2 개입니다. 필요에 따라 컬렉션에 항목을 추가하면 바인딩이 나머지를 처리합니다. –