mirror of
https://jihulab.com/DGP-Studio/Snap.Hutao.git
synced 2025-11-19 21:02:53 +08:00
fix infobar view duplicate items
This commit is contained in:
@@ -11,6 +11,8 @@
|
||||
xmlns:shuxb="using:Snap.Hutao.UI.Xaml.Behavior"
|
||||
xmlns:shuxc="using:Snap.Hutao.UI.Xaml.Control"
|
||||
xmlns:shuxm="using:Snap.Hutao.UI.Xaml.Markup"
|
||||
xmlns:shuxv="using:Snap.Hutao.UI.Xaml.View"
|
||||
d:DataContext="{d:DesignInstance Type=shuxv:InfoBarView}"
|
||||
mc:Ignorable="d">
|
||||
|
||||
<UserControl.Resources>
|
||||
@@ -101,13 +103,16 @@
|
||||
<clw:TransitionHelper
|
||||
x:Key="InfoBarPanelTransitionHelper"
|
||||
x:Name="InfoBarPanelTransitionHelper"
|
||||
DefaultEasingMode="EaseOut"
|
||||
DefaultEasingType="Cubic"
|
||||
Duration="0:0:0.3">
|
||||
<clw:TransitionConfig Id="Body" ScaleMode="Scale"/>
|
||||
<clw:TransitionConfig Id="Body" ScaleMode="ScaleX"/>
|
||||
<clw:TransitionConfig Id="Header" ScaleMode="ScaleX"/>
|
||||
</clw:TransitionHelper>
|
||||
</ResourceDictionary>
|
||||
</UserControl.Resources>
|
||||
|
||||
<Grid>
|
||||
<Grid Name="VisibilityRoot">
|
||||
<Border
|
||||
x:Name="ShowButtonBorder"
|
||||
Margin="16"
|
||||
@@ -125,7 +130,7 @@
|
||||
Transition="{StaticResource InfoBarPanelTransitionHelper}"/>
|
||||
</mxic:EventTriggerBehavior>
|
||||
</mxi:Interaction.Behaviors>
|
||||
<Grid>
|
||||
<Grid clw:TransitionHelper.Id="Header">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="auto"/>
|
||||
<ColumnDefinition MinWidth="32"/>
|
||||
@@ -151,57 +156,69 @@
|
||||
Style="{ThemeResource AcrylicBorderCardStyle}"
|
||||
Visibility="Collapsed">
|
||||
|
||||
<Grid RowSpacing="8">
|
||||
<Grid RowSpacing="16">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="auto"/>
|
||||
<RowDefinition/>
|
||||
</Grid.RowDefinitions>
|
||||
<StackPanel
|
||||
HorizontalAlignment="Right"
|
||||
Orientation="Horizontal"
|
||||
Spacing="8">
|
||||
<Button Click="OnClearAllButtonClick">
|
||||
<Grid ColumnSpacing="8">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="19"/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<FontIcon
|
||||
HorizontalAlignment="Center"
|
||||
FontSize="14"
|
||||
Glyph=""/>
|
||||
<TextBlock Grid.Column="1" Text="{shuxm:ResourceString Name=ViewInfoBarPanelClearAllContent}"/>
|
||||
</Grid>
|
||||
</Button>
|
||||
<Button>
|
||||
<mxi:Interaction.Behaviors>
|
||||
<mxic:EventTriggerBehavior EventName="Click">
|
||||
<clw:StartTransitionAction
|
||||
Source="{x:Bind InfoBarItemsBorder}"
|
||||
Target="{x:Bind ShowButtonBorder}"
|
||||
Transition="{StaticResource InfoBarPanelTransitionHelper}"/>
|
||||
</mxic:EventTriggerBehavior>
|
||||
</mxi:Interaction.Behaviors>
|
||||
<Grid ColumnSpacing="8">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="19"/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<FontIcon
|
||||
HorizontalAlignment="Center"
|
||||
FontSize="14"
|
||||
Glyph=""/>
|
||||
<TextBlock Grid.Column="1" Text="{shuxm:ResourceString Name=ViewInfoBarPanelContractContent}"/>
|
||||
</Grid>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
<Grid ColumnSpacing="8">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition/>
|
||||
<ColumnDefinition Width="auto"/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<TextBlock
|
||||
VerticalAlignment="Center"
|
||||
clw:TransitionHelper.Id="Header"
|
||||
Style="{StaticResource SubtitleTextBlockStyle}"
|
||||
Text="所有通知"/>
|
||||
<StackPanel
|
||||
Grid.Column="1"
|
||||
Orientation="Horizontal"
|
||||
Spacing="8">
|
||||
<Button Click="OnClearAllButtonClick">
|
||||
<Grid ColumnSpacing="8">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="19"/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<FontIcon
|
||||
HorizontalAlignment="Center"
|
||||
FontSize="14"
|
||||
Glyph=""/>
|
||||
<TextBlock Grid.Column="1" Text="{shuxm:ResourceString Name=ViewInfoBarPanelClearAllContent}"/>
|
||||
</Grid>
|
||||
</Button>
|
||||
<Button>
|
||||
<mxi:Interaction.Behaviors>
|
||||
<mxic:EventTriggerBehavior EventName="Click">
|
||||
<clw:StartTransitionAction
|
||||
Source="{x:Bind InfoBarItemsBorder}"
|
||||
Target="{x:Bind ShowButtonBorder}"
|
||||
Transition="{StaticResource InfoBarPanelTransitionHelper}"/>
|
||||
</mxic:EventTriggerBehavior>
|
||||
</mxi:Interaction.Behaviors>
|
||||
<Grid ColumnSpacing="8">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="19"/>
|
||||
<ColumnDefinition/>
|
||||
</Grid.ColumnDefinitions>
|
||||
<FontIcon
|
||||
HorizontalAlignment="Center"
|
||||
FontSize="14"
|
||||
Glyph=""/>
|
||||
<TextBlock Grid.Column="1" Text="{shuxm:ResourceString Name=ViewInfoBarPanelContractContent}"/>
|
||||
</Grid>
|
||||
</Button>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<ScrollViewer Grid.Row="1">
|
||||
<ItemsControl
|
||||
MaxWidth="480"
|
||||
ItemContainerTransitions="{StaticResource AddDeleteThemeTransitions}"
|
||||
ItemTemplateSelector="{StaticResource InfoBarTemplateSelector}"
|
||||
ItemsPanel="{StaticResource StackPanelSpacing8Template}"
|
||||
ItemsSource="{x:Bind InfoBars}"/>
|
||||
ItemsSource="{Binding InfoBars, Mode=OneWay}"/>
|
||||
</ScrollViewer>
|
||||
</Grid>
|
||||
</Border>
|
||||
|
||||
@@ -17,6 +17,7 @@ internal sealed partial class InfoBarView : UserControl
|
||||
public InfoBarView()
|
||||
{
|
||||
InitializeComponent();
|
||||
DataContext = this;
|
||||
|
||||
IServiceProvider serviceProvider = Ioc.Default;
|
||||
infoBarService = serviceProvider.GetRequiredService<IInfoBarService>();
|
||||
@@ -32,27 +33,33 @@ internal sealed partial class InfoBarView : UserControl
|
||||
|
||||
private void OnInfoBarsCollectionChanged(object? sender, NotifyCollectionChangedEventArgs args)
|
||||
{
|
||||
switch (args.Action)
|
||||
HandleInfoBarsCollectionChangedAsync(args).SafeForget();
|
||||
|
||||
async ValueTask HandleInfoBarsCollectionChangedAsync(NotifyCollectionChangedEventArgs args)
|
||||
{
|
||||
case NotifyCollectionChangedAction.Add:
|
||||
{
|
||||
InfoBarPanelTransitionHelper.Source = ShowButtonBorder;
|
||||
InfoBarPanelTransitionHelper.Target = InfoBarItemsBorder;
|
||||
InfoBarPanelTransitionHelper.StartAsync();
|
||||
break;
|
||||
}
|
||||
if (InfoBars.Count > 0)
|
||||
{
|
||||
VisibilityRoot.Visibility = Visibility.Visible;
|
||||
}
|
||||
|
||||
case NotifyCollectionChangedAction.Remove:
|
||||
{
|
||||
if (InfoBars.Count is 0)
|
||||
switch (args.Action)
|
||||
{
|
||||
case NotifyCollectionChangedAction.Add:
|
||||
{
|
||||
InfoBarPanelTransitionHelper.Source = InfoBarItemsBorder;
|
||||
InfoBarPanelTransitionHelper.Target = ShowButtonBorder;
|
||||
InfoBarPanelTransitionHelper.StartAsync();
|
||||
InfoBarPanelTransitionHelper.Source = ShowButtonBorder;
|
||||
InfoBarPanelTransitionHelper.Target = InfoBarItemsBorder;
|
||||
await InfoBarPanelTransitionHelper.StartAsync().ConfigureAwait(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
if (InfoBars.Count is 0)
|
||||
{
|
||||
InfoBarPanelTransitionHelper.Source = InfoBarItemsBorder;
|
||||
InfoBarPanelTransitionHelper.Target = ShowButtonBorder;
|
||||
await InfoBarPanelTransitionHelper.StartAsync().ConfigureAwait(true);
|
||||
VisibilityRoot.Visibility = Visibility.Collapsed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user