2016-06-03 2 views
0

Messagebox enter image description here콘솔과 같은 메시지 상자가

어떻게 WPF에서이 같은 것을 만들 수 있습니까? 텍스트 메시지를 표시 할 수있는 상자, 오래된 상자는 사라지지 않고 위쪽으로 이동합니다. 채팅 같은 것. 스크롤 막대를 사용하지 않고도 여러 텍스트 메시지를 표시 할 수있는 메시지 상자 만 있으면됩니다. 메시지가 작성된 시간은 편리 할 수 ​​있지만 반드시 필요한 것은 아닙니다.

+3

나는 대개'ItemsControl'을 바인딩하는'Message' 객체의'ObservableCollection'을 사용합니다. 'Message'는'Time'과'Text' 속성을 가지고 있습니다. 템플릿은 단지'Message'의 속성에 바인딩 된'TextBlock' 2 개입니다. 필요에 따라 컬렉션에 항목을 추가하면 바인딩이 나머지를 처리합니다. –

답변

2

대화 상자로 창을 사용하고 해당 대화 상자의 목록보기로 메시지를 바인딩 할 수 있습니다. 어떻게 할 수 있는지 보여주기 위해 샘플 어플리케이션을 만들었습니다. 이것은 아주 기본적인 메시징 응용 프로그램을 보여주기위한 샘플 일뿐입니다. 이 제품을 사용하지 마십시오.

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; } 
    } 
} 

도움이 되었기를 바랍니다.

관련 문제