优化消息处理与界面翻译

在 `ChatDataModel.cs` 中添加了控件引用并重命名消息类型属性。
在 `TrayIconManager.cs` 中将菜单项文本翻译为中文并注释掉部分代码。
调整 `LoginWindow.xaml` 的窗口尺寸。
在 `MainWindow.xaml` 中添加了 `x:Name` 属性和数据触发器,改善了用户体验。
在 `MainWindow.xaml.cs` 中添加了用户登录时的欢迎消息逻辑,并统一了消息类型属性名称。
This commit is contained in:
绪山七寻 2025-06-07 18:37:25 +08:00
parent 15147b88a6
commit f4de02ec38
5 changed files with 33 additions and 16 deletions

View File

@ -6,6 +6,8 @@ using System.Threading.Tasks;
using System.Windows.Media;
using System.Windows;
using System.Windows.Media.Imaging;
using System.Windows.Controls;
using System.Windows.Input;
namespace chatclient.Data
{
@ -21,7 +23,7 @@ namespace chatclient.Data
/// <summary>
/// 消息类型(文本、图片、文件、系统消息等)
/// </summary>
public required MessageType Type { get; set; } = MessageType.Text;
public required MessageType MsgType { get; set; } = MessageType.Text;
/// <summary>
/// 消息发送者的头像图片
/// </summary>

View File

@ -51,13 +51,13 @@ namespace chatclient.Data
};
// 添加菜单项
contextMenu.Items.Add(CreateMenuItem("Open Application", PackIconKind.WindowRestore, OpenApp_Click));
contextMenu.Items.Add(CreateMenuItem("Settings", PackIconKind.Cog, Settings_Click));
contextMenu.Items.Add(CreateMenuItem("打开程序", PackIconKind.WindowRestore, OpenApp_Click));
contextMenu.Items.Add(CreateMenuItem("设置", PackIconKind.Cog, Settings_Click));
contextMenu.Items.Add(new Separator { Style = (Style)Application.Current.Resources["MaterialDesignLightSeparator"] });
contextMenu.Items.Add(CreateMenuItem("Check for Updates", PackIconKind.Update, Updates_Click));
contextMenu.Items.Add(CreateMenuItem("Help", PackIconKind.HelpCircle, Help_Click));
contextMenu.Items.Add(new Separator { Style = (Style)Application.Current.Resources["MaterialDesignLightSeparator"] });
contextMenu.Items.Add(CreateMenuItem("Exit", PackIconKind.Power, Exit_Click));
//contextMenu.Items.Add(CreateMenuItem("Check for Updates", PackIconKind.Update, Updates_Click));
//contextMenu.Items.Add(CreateMenuItem("Help", PackIconKind.HelpCircle, Help_Click));
//contextMenu.Items.Add(new Separator { Style = (Style)Application.Current.Resources["MaterialDesignLightSeparator"] });
contextMenu.Items.Add(CreateMenuItem("退出", PackIconKind.Power, Exit_Click));
return contextMenu;
}
@ -109,7 +109,6 @@ namespace chatclient.Data
private void Exit_Click(object sender, RoutedEventArgs e)
{
// 释放托盘图标资源
Dispose();
Application.Current.Shutdown();
}

View File

@ -7,7 +7,7 @@
xmlns:local="clr-namespace:chatclient"
xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls" x:Class="chatclient.LoginWindow"
mc:Ignorable="d"
Title="LoginWindow" Height="590" Width="360" MinHeight="590" MinWidth="360" MaxHeight="590" MaxWidth="360"
Title="LoginWindow" Height="590" Width="330" MinHeight="590" MinWidth="330" MaxHeight="590" MaxWidth="330"
ResizeMode="NoResize" Closing="Window_Closing">
<TabControl>

View File

@ -80,9 +80,9 @@
<!-- 消息卡片(始终在中间列) -->
<materialDesign:Card Grid.Column="1" Padding="10" HorizontalAlignment="{Binding Alignment}">
<StackPanel>
<TextBlock Text="{Binding Sender}" FontWeight="Bold" Foreground="{Binding SenderColor}"/>
<TextBlock Text="{Binding Content}" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding Timestamp, StringFormat='HH:mm:ss'}" Foreground="Gray" FontSize="10" HorizontalAlignment="Right" Margin="0,5,0,0"/>
<TextBlock Text="{Binding Sender}" x:Name="Sender" FontWeight="Bold" Foreground="{Binding SenderColor}"/>
<TextBlock Text="{Binding Content}" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding Timestamp, StringFormat='HH:mm:ss'}" x:Name="Timestamp" Foreground="Gray" FontSize="10" HorizontalAlignment="Right" Margin="0,5,0,0"/>
</StackPanel>
</materialDesign:Card>
<!-- 右侧头像仅当Alignment=Right时显示 -->
@ -96,6 +96,12 @@
</Grid>
<!-- 根据Alignment显示正确的头像 -->
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding MsgType}" Value="3">
<Setter TargetName="Sender" Property="Visibility" Value="Collapsed"/>
<Setter TargetName="Timestamp" Property="Visibility" Value="Collapsed"/>
<Setter TargetName="leftAvatar" Property="Visibility" Value="Collapsed"/>
<Setter TargetName="rightAvatar" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<!-- 左对齐消息:显示左侧头像 -->
<DataTrigger Binding="{Binding Alignment}" Value="Left">
<Setter TargetName="leftAvatar" Property="Visibility" Value="Visible"/>
@ -119,7 +125,7 @@
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBox x:Name="txtMessage" Grid.Row="0" materialDesign:HintAssist.Hint="输入消息..." AcceptsReturn="True" VerticalScrollBarVisibility="Auto"
TextWrapping="Wrap" MinHeight="50" MaxHeight="100" Margin="5" BorderBrush="#00000000"/>
TextWrapping="Wrap" MinHeight="50" MaxHeight="100" Margin="5" BorderBrush="#00000000" CaretBrush="#00673AB7" SelectionBrush="#00B39DDB"/>
<Button x:Name="btnSend" Grid.Row="1" Content="发送" MinWidth="80" Style="{StaticResource MaterialDesignRaisedButton}"
Click="SendMessage_Click" Width="20" HorizontalAlignment="Right" Margin="2,2,4,4"/>
</Grid>

View File

@ -149,6 +149,17 @@ namespace chatclient
var loginWindow = Application.Current.Windows.OfType<LoginWindow>().FirstOrDefault();
loginWindow?.Close();
mainWindow.Activate();
var chatmessage = new ChatMessage
{
Sender = "System",
MsgType = MessageType.System,
Image = new BitmapImage(new Uri("pack://application:,,,/resource/user.png")),
Content = $"你好 {UserName} !",
Timestamp = DateTime.Now,
Alignment = HorizontalAlignment.Center,
SenderColor = new SolidColorBrush(Colors.Gray)
};
mainWindow?.Messages.Add(chatmessage);
}
});
log.Info($"用户 {UserName} 登录成功(token:{token})");
@ -190,7 +201,7 @@ namespace chatclient
var chatmessage = new ChatMessage
{
Sender = chat.user ?? "未知用户",
Type = MessageType.Text,
MsgType = MessageType.Text,
Image = new BitmapImage(new Uri(chat.image ?? "pack://application:,,,/resource/user.png", UriKind.Absolute)),
Content = chat.message ?? "(无内容)",
Timestamp = DateTime.Now,
@ -205,7 +216,7 @@ namespace chatclient
var chatmessage = new ChatMessage
{
Sender = chat.user ?? "未知用户",
Type = MessageType.Text,
MsgType = MessageType.Text,
Image = new BitmapImage(new Uri(chat.image ?? "pack://application:,,,/resource/user.png", UriKind.Absolute)),
Content = chat.message ?? "(无内容)",
Timestamp = chat.timestamp,
@ -215,7 +226,6 @@ namespace chatclient
var mainWindow = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault();
mainWindow?.Messages.Add(chatmessage);
}
});
}
else