Render mail categories in list items

This commit is contained in:
Burak Kaan Köse
2026-04-22 01:27:48 +02:00
parent 09820dda71
commit 59505d6985
13 changed files with 254 additions and 5 deletions
@@ -8,6 +8,7 @@
xmlns:domain="using:Wino.Core.Domain"
xmlns:enums="using:Wino.Core.Domain.Enums"
xmlns:helpers="using:Wino.Helpers"
xmlns:mail="using:Wino.Core.Domain.Entities.Mail"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
@@ -23,6 +24,28 @@
Unloaded="OnUnloaded">
<UserControl.Resources>
<DataTemplate x:Key="DetailedMailCategoryTemplate" x:DataType="mail:MailCategory">
<Border
Margin="0,0,4,0"
Padding="6,2"
Background="{x:Bind helpers:XamlHelpers.GetSolidColorBrushFromHex(BackgroundColorHex), Mode=OneWay}"
CornerRadius="8">
<TextBlock
Foreground="{x:Bind helpers:XamlHelpers.GetCategoryTextBrush(TextColorHex, BackgroundColorHex), Mode=OneWay}"
Style="{StaticResource CaptionTextBlockStyle}"
Text="{x:Bind Name, Mode=OneWay}"
TextTrimming="CharacterEllipsis" />
</Border>
</DataTemplate>
<DataTemplate x:Key="CompactMailCategoryTemplate" x:DataType="mail:MailCategory">
<Ellipse
Width="8"
Height="8"
Margin="0,0,4,0"
Fill="{x:Bind helpers:XamlHelpers.GetSolidColorBrushFromHex(BackgroundColorHex), Mode=OneWay}" />
</DataTemplate>
<Style
x:Key="HoverActionButtonStyle"
BasedOn="{StaticResource DefaultButtonStyle}"
@@ -89,6 +112,7 @@
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- Sender + IsDraft + Hover Buttons -->
@@ -206,6 +230,21 @@
Text="{x:Bind helpers:XamlHelpers.GetMailItemDisplaySummaryForListing(MailItemInformation.IsDraft, MailItemInformation.CreationDate, Prefer24HourTimeFormat), Mode=OneWay}" />
</Grid>
<ItemsControl
x:Name="DetailedCategoriesContainer"
Grid.Row="3"
Margin="0,4,0,0"
HorizontalAlignment="Left"
ItemTemplate="{StaticResource DetailedMailCategoryTemplate}"
ItemsSource="{x:Bind MailItemInformation.Categories, Mode=OneWay}"
Visibility="{x:Bind helpers:XamlHelpers.CountToVisibilityConverter(MailItemInformation.Categories.Count), Mode=OneWay}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<!-- Message -->
<Grid
x:Name="PreviewTextContainerRoot"
@@ -233,6 +272,18 @@
Margin="4,4,1,4"
Orientation="Horizontal"
Spacing="2">
<ItemsControl
x:Name="CompactCategoriesContainer"
VerticalAlignment="Center"
ItemTemplate="{StaticResource CompactMailCategoryTemplate}"
ItemsSource="{x:Bind MailItemInformation.Categories, Mode=OneWay}"
Visibility="Collapsed">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
<TextBlock
Margin="0,0,4,0"
@@ -288,8 +339,13 @@
<VisualStateGroup x:Name="SizingStates">
<VisualState x:Name="Compact">
<VisualState.Setters>
<Setter Target="RootContainer.Height" Value="60" />
<Setter Target="ContentGrid.Padding" Value="8,0" />
<Setter Target="RootContainer.Height" Value="64" />
<Setter Target="ContentGrid.Padding" Value="8,6,8,6" />
<Setter Target="ContentStackpanel.VerticalAlignment" Value="Center" />
<Setter Target="PreviewTextContainerRoot.Margin" Value="0" />
<Setter Target="IconsContainer.Margin" Value="4,0,1,0" />
<Setter Target="DetailedCategoriesContainer.Visibility" Value="Collapsed" />
<Setter Target="CompactCategoriesContainer.Visibility" Value="Visible" />
<Setter Target="PreviewTextContainer.Visibility" Value="Collapsed" />
</VisualState.Setters>
<VisualState.StateTriggers>
@@ -300,8 +356,13 @@
<!-- Medium -->
<VisualState x:Name="Medium">
<VisualState.Setters>
<Setter Target="RootContainer.Height" Value="80" />
<Setter Target="ContentGrid.Padding" Value="6,0" />
<Setter Target="RootContainer.Height" Value="96" />
<Setter Target="ContentGrid.Padding" Value="6,8,6,6" />
<Setter Target="ContentStackpanel.VerticalAlignment" Value="Top" />
<Setter Target="DetailedCategoriesContainer.Margin" Value="0,2,0,0" />
<Setter Target="PreviewTextContainerRoot.Margin" Value="0,2,0,0" />
<Setter Target="IconsContainer.Margin" Value="4,2,1,0" />
<Setter Target="CompactCategoriesContainer.Visibility" Value="Collapsed" />
<Setter Target="PreviewTextContainer.Visibility" Value="Visible" />
</VisualState.Setters>
<VisualState.StateTriggers>
@@ -314,6 +375,11 @@
<VisualState.Setters>
<Setter Target="RootContainer.Height" Value="Auto" />
<Setter Target="ContentGrid.Padding" Value="12,12,6,12" />
<Setter Target="ContentStackpanel.VerticalAlignment" Value="Center" />
<Setter Target="DetailedCategoriesContainer.Margin" Value="0,4,0,0" />
<Setter Target="PreviewTextContainerRoot.Margin" Value="0" />
<Setter Target="IconsContainer.Margin" Value="4,4,1,4" />
<Setter Target="CompactCategoriesContainer.Visibility" Value="Collapsed" />
<Setter Target="PreviewTextContainer.Visibility" Value="Visible" />
</VisualState.Setters>
<VisualState.StateTriggers>
+6
View File
@@ -152,6 +152,12 @@ public static class XamlHelpers
public static Color GetWindowsColorFromHex(string hex) => hex.ToColor();
public static SolidColorBrush GetSolidColorBrushFromHex(string colorHex) => string.IsNullOrEmpty(colorHex) ? new SolidColorBrush(Colors.Transparent) : new SolidColorBrush(colorHex.ToColor());
public static SolidColorBrush GetCategoryTextBrush(string textColorHex, string backgroundColorHex)
=> !string.IsNullOrWhiteSpace(textColorHex)
? GetSolidColorBrushFromHex(textColorHex)
: string.IsNullOrWhiteSpace(backgroundColorHex)
? new SolidColorBrush(Colors.Black)
: GetReadableTextColor(backgroundColorHex);
public static FontWeight GetFontWeightBySyncState(bool isSyncing) => isSyncing ? FontWeights.SemiBold : FontWeights.Normal;
public static Brush GetWizardStepBadgeBrush(bool isActive)