WPF实现消息中心
↑↑↑點擊上方藍字關注我
一、概要
本文將講解基于WPF實現一個消息中心的功能,比如常見的軟件當中會經常收到服務端推送的“新聞”、“公告”等消息。這個時候就需要對這個需求進行分析了。
功能分析如下:
?消息內容顯示。?消息管理增、刪、批量刪除。?消息分類(通知類消息、交互類型消息例如可跳轉到某個連接或程序內的模塊)?消息處理(接受、刪除、忽略)
二、實現
1.消息內容顯示
這里考慮自定義的控件為Listbox,消息本身是一個多項的內容且需要操作每一項。
<ListBoxGrid.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}"><BorderHeight="30"BorderBrush="#FFBDBDBD"BorderThickness="0,0,0,0.6"><Grid><Grid.ColumnDefinitions><ColumnDefinition Width="1*" /><ColumnDefinition Width="40" /></Grid.ColumnDefinitions><DockPanel><LabelMaxWidth="70"Content="{Binding Path=Name}"Foreground="Red"ToolTip="{Binding Path=Name}" /><LabelMaxWidth="130"Content="{Binding Path=Content}"Foreground="White"ToolTip="{Binding Path=Content}" /></DockPanel><CheckBoxGrid.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><TextBoxMaxWidth="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" /><StackPanelMargin="5,5,5,9"HorizontalAlignment="Center"VerticalAlignment="Center"Orientation="Horizontal"><ButtonWidth="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}}" /><ButtonWidth="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}}" /><ButtonWidth="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 用Popup做下拉菜单