WPF中要实现如QQ一样的消息输入与显示,需要用啥控件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF中要实现如QQ一样的消息输入与显示,需要用啥控件相关的知识,希望对你有一定的参考价值。

如题,实现的效果是既可以在控件中只显示图片,只显示文字,或则图片文字一起显示。
图片加进去,如何让图片显示自身大小,而不是完全填充满整个RickTextBox?
追加20分

参考技术A   RickTextBox控件
  /// <summary>
  /// 将图片写入文本编辑框
  /// </summary>
  public static void AddImageToRichTextBox(ref RichTextBox CurrentBox, Bitmap _Bitmap)
  
  System.Windows.Controls.Image img = new System.Windows.Controls.Image();
  BitmapSource bImg = BitmapToImageSource(_Bitmap);
  img.Source = bImg;
  img.Stretch = Stretch.None; //图片缩放模式
  new InlineUIContainer(img, CurrentBox.Selection.Start); //插入图片到选定位置
  
假如你是做WPF版本类似QQ的聊天程序,可加我QQ328969111,我想学习,学习。
参考技术B RickTextBox追问

请问RickTextBox如何将图片放进去呢?能发个小Demo么?

追答

RichTextBox里面放文字和放图片的代码都在下面了哈!~

图片加进去,如何让图片显示自身大小,而不是完全填充满整个RickTextBox?
答:设置Image的Stretch="None"就行

本回答被提问者采纳

WPF实现消息中心

↑↑↑点击上方蓝字关注我

一、概要

本文将讲解基于WPF实现一个消息中心的功能,比如常见的软件当中会经常收到服务端推送的“新闻”、“公告”等消息。这个时候就需要对这个需求进行分析了。

功能分析如下:

•消息内容显示。•消息管理增、删、批量删除。•消息分类(通知类消息、交互类型消息例如可跳转到某个连接或程序内的模块)•消息处理(接受、删除、忽略)

二、实现

1.消息内容显示

这里考虑自定义的控件为Listbox,消息本身是一个多项的内容且需要操作每一项。

  <ListBox
    Grid.Row="1"
    MaxHeight="335"
    Background="{x:Null}"
    BorderThickness="0"
    ItemContainerStyle="{DynamicResource ListBoxItemStyle}"
    ItemsSource="{Binding MessageItem}"
    ScrollViewer.HorizontalScrollBarVisibility="Hidden">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <VirtualizingStackPanel Orientation="Vertical" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate DataType="{x:Type localModel:MessageItemModel}">
            <Border
                Height="30"
                BorderBrush="#FFBDBDBD"
                BorderThickness="0,0,0,0.6">
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="1*" />
                        <ColumnDefinition Width="40" />
                    </Grid.ColumnDefinitions>
                    <DockPanel>
                        <Label
                            MaxWidth="70"
                            Content="{Binding Path=Name}"
                            Foreground="Red"
                            ToolTip="{Binding Path=Name}" />
                        <Label
                            MaxWidth="130"
                            Content="{Binding Path=Content}"
                            Foreground="White"
                            ToolTip="{Binding Path=Content}" />
                    </DockPanel>
                    <CheckBox
                        Grid.Column="1"
                        FlowDirection="RightToLeft"
                        IsChecked="{Binding Path=CheckBoxState}" />
                </Grid>
            </Border>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

2.消息管理增、删、批量删除

主要容器定下来之后那么接下来每一项消息就是自定义ListboxItem即可,针对每一条消息要有具体的处理。

例如:

1.

通知类消息,只需要确定按钮。

2.

交互类型消息,需要确认、删除、忽略

 <DataTemplate x:Key="SelectedTemplate" DataType="{x:Type localModel:MessageItemModel}">
     <Border BorderBrush="#FFBDBDBD" BorderThickness="0,0,0,0.6">
         <StackPanel>
             <TextBox
                 MaxWidth="240"
                 MaxHeight="200"
                 Padding="0,5,0,0"
                 HorizontalAlignment="Center"
                 VerticalAlignment="Center"
                 Background="Transparent"
                 BorderThickness="0"
                 FontSize="14"
                 Foreground="White"
                 IsReadOnly="True"
                 Text="{Binding Path=Content}"
                 TextAlignment="Center"
                 TextWrapping="WrapWithOverflow"
                 ToolTip="{Binding Path=Content}"
                 VerticalScrollBarVisibility="Auto" />
             <StackPanel
                 Margin="5,5,5,9"
                 HorizontalAlignment="Center"
                 VerticalAlignment="Center"
                 Orientation="Horizontal">
                 <Button
                     Width="60"
                     Height="25"
                     Margin="5"
                     Command="{Binding DataContext.ClickAcceptCommand, RelativeSource={RelativeSource AncestorType=ListBox}}"
                     CommandParameter="{Binding}"
                     Content="接受"
                     Style="{StaticResource BlueButtonStyle}"
                     Visibility="{Binding Path=InvitationType, Converter={StaticResource BooleanToVisibilityConverter}}" />
                 <Button
                     Width="60"
                     Height="25"
                     Margin="5"
                     Command="{Binding DataContext.ClickRefuseCommand, RelativeSource={RelativeSource AncestorType=ListBox}}"
                     CommandParameter="{Binding}"
                     Content="忽略"
                     Style="{StaticResource BlueButtonStyle}"
                     Visibility="{Binding Path=InvitationType, Converter={StaticResource BooleanToVisibilityConverter}}" />
                 <Button
                     Width="60"
                     Height="25"
                     Margin="5"
                     Command="{Binding DataContext.ClickAgreeCommand, RelativeSource={RelativeSource AncestorType=ListBox}}"
                     CommandParameter="{Binding}"
                     Content="确认"
                     Style="{StaticResource BlueButtonStyle}"
                     Visibility="{Binding Path=NoticeType, Converter={StaticResource BooleanToVisibilityConverter}}" />
             </StackPanel>
         </StackPanel>
     </Border>
 </DataTemplate>

3.消息分类

这里就是在Model层定义好具体的枚举即可。

/// <summary>
/// 消息处理结果
/// </summary>
public enum SysMessageResult
{
    /// <summary>
    /// 未处理
    /// </summary>
    Unhandled = 0,
    /// <summary>
    /// 同意
    /// </summary>
    Processed = 1
}

/// <summary>
/// 消息类型
/// </summary>
public enum SysMessageType
{
    /// <summary>
    /// 通知类型
    /// </summary>
    NoticeType = 0,
    /// <summary>
    /// 其他类型
    /// </summary>
    OtherType = 1
}

4.消息处理

消息处理指的是,“确定”、“接受”、“忽略”这三个按钮对消息内容处理的逻辑,如果小伙伴需要可根据自己的需要修改。我这里定义如下:

•确定:通常处理通知消息,处理仅仅是从消息列表中移除该项不做其他行为。•接受:是处理交互类型的按钮,处理从消息列表中移除该项且触发其他业务处理行为。•忽略:处理所有类型消息,只是不显示在UI中但还会存在于消息列表中下次或空闲时间处理消息。

以上是关于WPF中要实现如QQ一样的消息输入与显示,需要用啥控件的主要内容,如果未能解决你的问题,请参考以下文章

wpf 用啥控件做类似QQ标签这样的功能呀?

QQ的一些图标是隐藏了按钮的边框 但是鼠标放在上面又出现了 想问一下如何用WPF实现的

MYSQL数据表中要存储密码要用啥类型

WPF与WinForm

Android消息传递用啥好?

WPF—QQ界面:QQ好友分组列表的效果实现 及 截稿