Skip to content

Commit eea8649

Browse files
committed
Обновлён рендеринг иконок уведомлений: glyph + фон
Изменён ToastNotificationIconConverter: теперь возвращает только glyph для Path, а цветной круг-фон задаётся отдельно в XAML. В шаблоне уведомления Border заменён на Viewbox с Canvas, где рисуется цветной круг и белый glyph поверх. Добавлен ресурс конвертера в XAML, реализовано скрытие иконки при Icon=None. Улучшена визуализация иконок для всех типов уведомлений.
1 parent d2cffdd commit eea8649

2 files changed

Lines changed: 62 additions & 31 deletions

File tree

MathCore.WPF/Notifications/ToastNotificationIconConverter.cs

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@ public class ToastNotificationIconConverter : IValueConverter
1919
return GetIconColor(icon);
2020

2121
if (parameter_str == "Path")
22-
return GetIconPath(icon);
22+
{
23+
var glyph = GetIconGlyphPath(icon);
24+
return string.IsNullOrEmpty(glyph) ? null : Geometry.Parse(glyph);
25+
}
2326

2427
return null;
2528
}
@@ -38,32 +41,32 @@ public object ConvertBack(object? Value, Type TargetType, object? Parameter, Cul
3841
_ => new SolidColorBrush(Color.FromRgb(0x80, 0x80, 0x80))
3942
};
4043

41-
private static string GetIconPath(ToastNotificationIcon Icon) => Icon switch
44+
private static string GetIconGlyphPath(ToastNotificationIcon Icon) => Icon switch
4245
{
43-
// Информация (i в круге)
44-
ToastNotificationIcon.Information =>
45-
"M 50,0 C 22.4,0 0,22.4 0,50 0,77.6 22.4,100 50,100 77.6,100 100,77.6 100,50 100,22.4 77.6,0 50,0 Z M 50,80 C 47,80 45,78 45,75 L 45,45 C 45,42 47,40 50,40 53,40 55,42 55,45 L 55,75 C 55,78 53,80 50,80 Z M 50,30 C 47,30 45,28 45,25 45,22 47,20 50,20 53,20 55,22 55,25 55,28 53,30 50,30 Z",
46+
// Информация - маленькая точка и вертикальный столбик
47+
ToastNotificationIcon.Information =>
48+
"M 50,80 C 47,80 45,78 45,75 L 45,45 C 45,42 47,40 50,40 53,40 55,42 55,45 L 55,75 C 55,78 53,80 50,80 Z M 50,30 C 47,30 45,28 45,25 45,22 47,20 50,20 53,20 55,22 55,25 55,28 53,30 50,30 Z",
4649

47-
// Успех (галочка в круге)
48-
ToastNotificationIcon.Success =>
49-
"M 50,0 C 22.4,0 0,22.4 0,50 0,77.6 22.4,100 50,100 77.6,100 100,77.6 100,50 100,22.4 77.6,0 50,0 Z M 42,70 L 20,48 26,42 42,58 74,26 80,32 Z",
50+
// Успех - галочка
51+
ToastNotificationIcon.Success =>
52+
"M 42,70 L 20,48 26,42 42,58 74,26 80,32 Z",
5053

51-
// Предупреждение (треугольник с восклицательным знаком)
52-
ToastNotificationIcon.Warning =>
53-
"M 50,5 L 95,90 5,90 Z M 50,75 C 47,75 45,73 45,70 45,67 47,65 50,65 53,65 55,67 55,70 55,73 53,75 50,75 Z M 45,35 L 47,60 53,60 55,35 Z",
54+
// Предупреждение - восклицательный знак
55+
ToastNotificationIcon.Warning =>
56+
"M 50,75 C 47,75 45,73 45,70 45,67 47,65 50,65 53,65 55,67 55,70 55,73 53,75 50,75 Z M 45,35 L 47,60 53,60 55,35 Z",
5457

55-
// Ошибка (крестик в круге)
56-
ToastNotificationIcon.Error =>
57-
"M 50,0 C 22.4,0 0,22.4 0,50 0,77.6 22.4,100 50,100 77.6,100 100,77.6 100,50 100,22.4 77.6,0 50,0 Z M 70,65 L 65,70 50,55 35,70 30,65 45,50 30,35 35,30 50,45 65,30 70,35 55,50 Z",
58+
// Ошибка - крестик
59+
ToastNotificationIcon.Error =>
60+
"M 70,65 L 65,70 50,55 35,70 30,65 45,50 30,35 35,30 50,45 65,30 70,35 55,50 Z",
5861

59-
// Критическая ошибка (крестик в круге с дополнительной обводкой)
60-
ToastNotificationIcon.Critical =>
61-
"M 50,0 C 22.4,0 0,22.4 0,50 0,77.6 22.4,100 50,100 77.6,100 100,77.6 100,50 100,22.4 77.6,0 50,0 Z M 50,10 C 72.1,10 90,27.9 90,50 90,72.1 72.1,90 50,90 27.9,90 10,72.1 10,50 10,27.9 27.9,10 50,10 Z M 70,65 L 65,70 50,55 35,70 30,65 45,50 30,35 35,30 50,45 65,30 70,35 55,50 Z",
62+
// Критическая ошибка - крестик (тот же glyph)
63+
ToastNotificationIcon.Critical =>
64+
"M 70,65 L 65,70 50,55 35,70 30,65 45,50 30,35 35,30 50,45 65,30 70,35 55,50 Z",
6265

63-
// Вопрос (знак вопроса в круге)
64-
ToastNotificationIcon.Question =>
65-
"M 50,0 C 22.4,0 0,22.4 0,50 0,77.6 22.4,100 50,100 77.6,100 100,77.6 100,50 100,22.4 77.6,0 50,0 Z M 50,80 C 47,80 45,78 45,75 45,72 47,70 50,70 53,70 55,72 55,75 55,78 53,80 50,80 Z M 58,58 C 55,61 53,63 53,67 L 47,67 C 47,62 49,59 52,56 55,53 57,51 57,48 57,45 55,42 50,42 45,42 43,45 43,48 L 37,48 C 37,41 42,36 50,36 58,36 63,41 63,48 63,52 61,55 58,58 Z",
66+
// Вопрос - знак вопроса и точка
67+
ToastNotificationIcon.Question =>
68+
"M 50,80 C 47,80 45,78 45,75 45,72 47,70 50,70 53,70 55,72 55,75 55,78 53,80 50,80 Z M 58,58 C 55,61 53,63 53,67 L 47,67 C 47,62 49,59 52,56 55,53 57,51 57,48 57,45 55,42 50,42 45,42 43,45 43,48 L 37,48 C 37,41 42,36 50,36 58,36 63,41 63,48 63,52 61,55 58,58 Z",
6669

67-
_ => ""
70+
_ => string.Empty
6871
};
6972
}

MathCore.WPF/Notifications/ToastNotificationStyles.xaml

Lines changed: 38 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
33
xmlns:local="clr-namespace:MathCore.WPF.Notifications">
44

5+
<local:ToastNotificationIconConverter x:Key="ToastIconConverter"/>
6+
57
<!-- Стиль по умолчанию для окна уведомления -->
68
<Style x:Key="DefaultToastNotificationWindowStyle" TargetType="{x:Type Window}">
79
<Setter Property="Template">
@@ -31,16 +33,42 @@
3133
<RowDefinition Height="*"/>
3234
</Grid.RowDefinitions>
3335

34-
<!-- Иконка - простая заглушка пока без конвертера -->
35-
<Border Grid.Column="0"
36-
Grid.Row="0"
37-
Grid.RowSpan="2"
38-
Width="32"
39-
Height="32"
40-
Margin="0,0,10,0"
41-
VerticalAlignment="Top"
42-
Background="#FF0078D7"
43-
CornerRadius="16"/>
36+
<!-- Иконка как векторный Path с кругом-фоном -->
37+
<Viewbox Grid.Column="0"
38+
Grid.Row="0"
39+
Grid.RowSpan="2"
40+
Width="32"
41+
Height="32"
42+
Margin="0,0,10,0"
43+
VerticalAlignment="Top">
44+
<Viewbox.Style>
45+
<Style TargetType="Viewbox">
46+
<Style.Triggers>
47+
<DataTrigger Binding="{Binding Icon}" Value="{x:Static local:ToastNotificationIcon.None}">
48+
<Setter Property="Visibility" Value="Collapsed"/>
49+
</DataTrigger>
50+
</Style.Triggers>
51+
</Style>
52+
</Viewbox.Style>
53+
54+
<Canvas Width="100" Height="100">
55+
<!-- Фон круга -->
56+
<Ellipse x:Name="IconBackground"
57+
Width="100" Height="100"
58+
Fill="{Binding Icon, Converter={StaticResource ToastIconConverter}, ConverterParameter=Color}"
59+
Visibility="Visible"/>
60+
61+
<!-- Glyph поверх фона -->
62+
<Path x:Name="IconPath"
63+
Data="{Binding Icon, Converter={StaticResource ToastIconConverter}, ConverterParameter=Path}"
64+
Fill="White"
65+
Stretch="Uniform"
66+
Width="100"
67+
Height="100"
68+
RenderOptions.BitmapScalingMode="HighQuality"
69+
SnapsToDevicePixels="True"/>
70+
</Canvas>
71+
</Viewbox>
4472

4573
<!-- Заголовок -->
4674
<TextBlock Grid.Column="1"

0 commit comments

Comments
 (0)