Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 12 additions & 13 deletions SalmonEgg/SalmonEgg/Controls/ChatSkeleton.xaml.cs
Original file line number Diff line number Diff line change
@@ -1,21 +1,20 @@
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;

namespace SalmonEgg.Controls
namespace SalmonEgg.Controls;

public sealed partial class ChatSkeleton : UserControl
{
public sealed partial class ChatSkeleton : UserControl
public ChatSkeleton()
{
public ChatSkeleton()
{
InitializeComponent();
Loaded += OnLoaded;
Unloaded += OnUnloaded;
}
InitializeComponent();
Loaded += OnLoaded;
Unloaded += OnUnloaded;
}

private void OnLoaded(object sender, RoutedEventArgs e)
=> ShimmerStoryboard.Begin();
private void OnLoaded(object sender, RoutedEventArgs e)
=> ShimmerStoryboard.Begin();

private void OnUnloaded(object sender, RoutedEventArgs e)
=> ShimmerStoryboard.Stop();
}
private void OnUnloaded(object sender, RoutedEventArgs e)
=> ShimmerStoryboard.Stop();
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,41 +2,40 @@
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Data;

namespace SalmonEgg.Presentation.Converters
namespace SalmonEgg.Presentation.Converters;

/// <summary>
/// 将布尔值转换为 Visibility
/// Requirements: 4.2
/// </summary>
public class BoolToVisibilityConverter : IValueConverter
{
/// <summary>
/// 将布尔值转换为 Visibility
/// Requirements: 4.2
/// </summary>
public class BoolToVisibilityConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, string language)
{
public object Convert(object value, Type targetType, object parameter, string language)
if (value is bool boolValue)
{
if (value is bool boolValue)
{
bool invert = parameter?.ToString() == "Invert";
if (invert) boolValue = !boolValue;
return boolValue ? Visibility.Visible : Visibility.Collapsed;
}

if (value is string stringValue)
{
return string.IsNullOrWhiteSpace(stringValue) ? Visibility.Collapsed : Visibility.Visible;
}

return Visibility.Collapsed;
bool invert = parameter?.ToString() == "Invert";
if (invert) boolValue = !boolValue;
return boolValue ? Visibility.Visible : Visibility.Collapsed;
}

public object ConvertBack(object value, Type targetType, object parameter, string language)
if (value is string stringValue)
{
if (value is Visibility visibility)
{
var result = visibility == Visibility.Visible;
var invert = parameter?.ToString() == "Invert";
return invert ? !result : result;
}
return string.IsNullOrWhiteSpace(stringValue) ? Visibility.Collapsed : Visibility.Visible;
}

return false;
return Visibility.Collapsed;
}

public object ConvertBack(object value, Type targetType, object parameter, string language)
{
if (value is Visibility visibility)
{
var result = visibility == Visibility.Visible;
var invert = parameter?.ToString() == "Invert";
return invert ? !result : result;
}

return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,32 @@
using Microsoft.UI.Xaml.Media;
using SalmonEgg.Domain.Models;

namespace SalmonEgg.Presentation.Converters
namespace SalmonEgg.Presentation.Converters;

/// <summary>
/// 将连接状态转换为颜色
/// Requirements: 4.2
/// </summary>
public class ConnectionStatusToColorConverter : IValueConverter
{
/// <summary>
/// 将连接状态转换为颜色
/// Requirements: 4.2
/// </summary>
public class ConnectionStatusToColorConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, string language)
{
public object Convert(object value, Type targetType, object parameter, string language)
if (value is ConnectionStatus status)
{
if (value is ConnectionStatus status)
return status switch
{
return status switch
{
ConnectionStatus.Connected => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 34, 197, 94)), // Green
ConnectionStatus.Connecting => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 234, 179, 8)), // Yellow
ConnectionStatus.Reconnecting => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 249, 115, 22)),// Orange
ConnectionStatus.Error => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 239, 68, 68)), // Red
_ => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 156, 163, 175)) // Gray
};
}
return new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 156, 163, 175));
ConnectionStatus.Connected => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 34, 197, 94)), // Green
ConnectionStatus.Connecting => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 234, 179, 8)), // Yellow
ConnectionStatus.Reconnecting => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 249, 115, 22)),// Orange
ConnectionStatus.Error => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 239, 68, 68)), // Red
_ => new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 156, 163, 175)) // Gray
};
}
return new SolidColorBrush(Microsoft.UI.ColorHelper.FromArgb(255, 156, 163, 175));
}

public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
33 changes: 16 additions & 17 deletions SalmonEgg/SalmonEgg/Presentation/Converters/InverseBoolConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,28 @@
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Data;

namespace SalmonEgg.Presentation.Converters
namespace SalmonEgg.Presentation.Converters;

/// <summary>
/// 将布尔值取反后转换为 Visibility
/// </summary>
public class InverseBoolConverter : IValueConverter
{
/// <summary>
/// 将布尔值取反后转换为 Visibility
/// </summary>
public class InverseBoolConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, string language)
{
public object Convert(object value, Type targetType, object parameter, string language)
if (value is bool boolValue)
{
if (value is bool boolValue)
{
return boolValue ? Visibility.Collapsed : Visibility.Visible;
}
return Visibility.Visible;
return boolValue ? Visibility.Collapsed : Visibility.Visible;
}
return Visibility.Visible;
}

public object ConvertBack(object value, Type targetType, object parameter, string language)
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
if (value is Visibility visibility)
{
if (value is Visibility visibility)
{
return visibility == Visibility.Collapsed;
}
return true;
return visibility == Visibility.Collapsed;
}
return true;
}
}
Original file line number Diff line number Diff line change
@@ -1,30 +1,29 @@
using System;
using Microsoft.UI.Xaml.Data;

namespace SalmonEgg.Presentation.Converters
namespace SalmonEgg.Presentation.Converters;

/// <summary>
/// 将布尔值取反(返回 bool,不是 Visibility)
/// 用于 IsEnabled 等需要 bool 的属性
/// </summary>
public class InverseBooleanConverter : IValueConverter
{
/// <summary>
/// 将布尔值取反(返回 bool,不是 Visibility)
/// 用于 IsEnabled 等需要 bool 的属性
/// </summary>
public class InverseBooleanConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, string language)
{
public object Convert(object value, Type targetType, object parameter, string language)
if (value is bool boolValue)
{
if (value is bool boolValue)
{
return !boolValue;
}
return true;
return !boolValue;
}
return true;
}

public object ConvertBack(object value, Type targetType, object parameter, string language)
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
if (value is bool boolValue)
{
if (value is bool boolValue)
{
return !boolValue;
}
return false;
return !boolValue;
}
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,25 @@
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Data;

namespace SalmonEgg.Presentation.Converters
namespace SalmonEgg.Presentation.Converters;

/// <summary>
/// 将消息方向转换为对齐方式
/// Requirements: 4.2
/// </summary>
public class MessageDirectionToAlignmentConverter : IValueConverter
{
/// <summary>
/// 将消息方向转换为对齐方式
/// Requirements: 4.2
/// </summary>
public class MessageDirectionToAlignmentConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, string language)
{
public object Convert(object value, Type targetType, object parameter, string language)
if (value is bool isOutgoing)
{
if (value is bool isOutgoing)
{
return isOutgoing ? HorizontalAlignment.Right : HorizontalAlignment.Left;
}
return HorizontalAlignment.Left;
return isOutgoing ? HorizontalAlignment.Right : HorizontalAlignment.Left;
}
return HorizontalAlignment.Left;
}

public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,42 +3,41 @@
using Microsoft.UI.Xaml.Data;
using Microsoft.UI.Xaml.Media;

namespace SalmonEgg.Presentation.Converters
namespace SalmonEgg.Presentation.Converters;

/// <summary>
/// 将消息方向转换为背景色画刷
/// 用户发出(True)返回 AccentFillColorDefaultBrush
/// AI接收(False)返回 CardBackgroundFillColorDefaultBrush
/// </summary>
public class MessageDirectionToBackgroundConverter : IValueConverter
{
/// <summary>
/// 将消息方向转换为背景色画刷
/// 用户发出(True)返回 AccentFillColorDefaultBrush
/// AI接收(False)返回 CardBackgroundFillColorDefaultBrush
/// </summary>
public class MessageDirectionToBackgroundConverter : IValueConverter
public object Convert(object value, Type targetType, object parameter, string language)
{
public object Convert(object value, Type targetType, object parameter, string language)
if (value is bool isOutgoing)
{
if (value is bool isOutgoing)
if (isOutgoing)
{
if (isOutgoing)
if (Microsoft.UI.Xaml.Application.Current.Resources.TryGetValue("AccentFillColorDefaultBrush", out var accentBrush))
{
if (Microsoft.UI.Xaml.Application.Current.Resources.TryGetValue("AccentFillColorDefaultBrush", out var accentBrush))
{
return accentBrush;
}
return accentBrush;
}
else
}
else
{
if (Microsoft.UI.Xaml.Application.Current.Resources.TryGetValue("ControlFillColorSecondaryBrush", out var cardBrush))
{
if (Microsoft.UI.Xaml.Application.Current.Resources.TryGetValue("ControlFillColorSecondaryBrush", out var cardBrush))
{
return cardBrush;
}
return cardBrush;
}
}

// Fallback
return Microsoft.UI.Xaml.Application.Current.Resources["LayerOnAcrylicFillColorDefaultBrush"];
}

public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
// Fallback
return Microsoft.UI.Xaml.Application.Current.Resources["LayerOnAcrylicFillColorDefaultBrush"];
}

public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
Loading