Merge pull request #121 from irihitech/Coolkeke/main
feat: fix active animation issue.
This commit is contained in:
@@ -25,7 +25,7 @@
|
|||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
CornerRadius="2"
|
CornerRadius="2"
|
||||||
IsActive="{Binding #active.IsChecked}"
|
IsActive="{Binding #active.IsChecked}"
|
||||||
Loading="{Binding #loading.IsChecked}">
|
IsLoading="{Binding #loading.IsChecked}">
|
||||||
<Image RenderOptions.BitmapInterpolationMode="HighQuality" Source="../Assets/Ursa.ico" />
|
<Image RenderOptions.BitmapInterpolationMode="HighQuality" Source="../Assets/Ursa.ico" />
|
||||||
</u:Skeleton>
|
</u:Skeleton>
|
||||||
<UniformGrid
|
<UniformGrid
|
||||||
@@ -38,23 +38,23 @@
|
|||||||
VerticalAlignment="Top"
|
VerticalAlignment="Top"
|
||||||
CornerRadius="2"
|
CornerRadius="2"
|
||||||
IsActive="{Binding #active.IsChecked}"
|
IsActive="{Binding #active.IsChecked}"
|
||||||
Loading="{Binding #loading.IsChecked}">
|
IsLoading="{Binding #loading.IsChecked}">
|
||||||
<TextBlock Margin="0,2" Text="是先有鸡还是先有蛋" />
|
<SelectableTextBlock Margin="0,2" Text="是先有鸡还是先有蛋" />
|
||||||
</u:Skeleton>
|
</u:Skeleton>
|
||||||
<u:Skeleton
|
<u:Skeleton
|
||||||
Margin="0,0,100,0"
|
Margin="0,0,100,0"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
CornerRadius="2"
|
CornerRadius="2"
|
||||||
IsActive="{Binding #active.IsChecked}"
|
IsActive="{Binding #active.IsChecked}"
|
||||||
Loading="{Binding #loading.IsChecked}">
|
IsLoading="{Binding #loading.IsChecked}">
|
||||||
<TextBlock Margin="0,2" Text="什么是工匠精神" />
|
<SelectableTextBlock Margin="0,2" Text="什么是工匠精神" />
|
||||||
</u:Skeleton>
|
</u:Skeleton>
|
||||||
<u:Skeleton
|
<u:Skeleton
|
||||||
VerticalAlignment="Bottom"
|
VerticalAlignment="Bottom"
|
||||||
CornerRadius="2"
|
CornerRadius="2"
|
||||||
IsActive="{Binding #active.IsChecked}"
|
IsActive="{Binding #active.IsChecked}"
|
||||||
Loading="{Binding #loading.IsChecked}">
|
IsLoading="{Binding #loading.IsChecked}">
|
||||||
<TextBlock Margin="0,2" Text="看山不是山,看水不是水,看山还是山,看水还是水" />
|
<SelectableTextBlock Margin="0,2" Text="看山不是山,看水不是水,看山还是山,看水还是水" />
|
||||||
</u:Skeleton>
|
</u:Skeleton>
|
||||||
</UniformGrid>
|
</UniformGrid>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ public class MainViewViewModel : ViewModelBase
|
|||||||
MenuKeys.MenuKeySkeleton => new SkeletonDemoViewModel(),
|
MenuKeys.MenuKeySkeleton => new SkeletonDemoViewModel(),
|
||||||
MenuKeys.MenuKeyTagInput => new TagInputDemoViewModel(),
|
MenuKeys.MenuKeyTagInput => new TagInputDemoViewModel(),
|
||||||
MenuKeys.MenuKeyTimeline => new TimelineDemoViewModel(),
|
MenuKeys.MenuKeyTimeline => new TimelineDemoViewModel(),
|
||||||
MenuKeys.MenuKeySkeleton => new SkeletonDemoViewModel(),
|
|
||||||
MenuKeys.MenuKeyTwoTonePathIcon => new TwoTonePathIconDemoViewModel(),
|
MenuKeys.MenuKeyTwoTonePathIcon => new TwoTonePathIconDemoViewModel(),
|
||||||
MenuKeys.MenuKeyThemeToggler => new ThemeTogglerDemoViewModel(),
|
MenuKeys.MenuKeyThemeToggler => new ThemeTogglerDemoViewModel(),
|
||||||
MenuKeys.MenuKeyToolBar => new ToolBarDemoViewModel(),
|
MenuKeys.MenuKeyToolBar => new ToolBarDemoViewModel(),
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class MenuViewModel: ViewModelBase
|
|||||||
new() { MenuHeader = "Pagination", Key = MenuKeys.MenuKeyPagination },
|
new() { MenuHeader = "Pagination", Key = MenuKeys.MenuKeyPagination },
|
||||||
new() { MenuHeader = "RangeSlider", Key = MenuKeys.MenuKeyRangeSlider },
|
new() { MenuHeader = "RangeSlider", Key = MenuKeys.MenuKeyRangeSlider },
|
||||||
new() { MenuHeader = "Selection List", Key = MenuKeys.MenuKeySelectionList, Status = "New" },
|
new() { MenuHeader = "Selection List", Key = MenuKeys.MenuKeySelectionList, Status = "New" },
|
||||||
new() { MenuHeader = "Skeleton", Key = MenuKeys.MenuKeySkeleton },
|
new() { MenuHeader = "Skeleton", Key = MenuKeys.MenuKeySkeleton, Status = "New" },
|
||||||
new() { MenuHeader = "TagInput", Key = MenuKeys.MenuKeyTagInput },
|
new() { MenuHeader = "TagInput", Key = MenuKeys.MenuKeyTagInput },
|
||||||
new() { MenuHeader = "Theme Toggler", Key = MenuKeys.MenuKeyThemeToggler, Status = "New" },
|
new() { MenuHeader = "Theme Toggler", Key = MenuKeys.MenuKeyThemeToggler, Status = "New" },
|
||||||
new() { MenuHeader = "Timeline", Key = MenuKeys.MenuKeyTimeline, Status = "WIP" },
|
new() { MenuHeader = "Timeline", Key = MenuKeys.MenuKeyTimeline, Status = "WIP" },
|
||||||
|
|||||||
@@ -25,33 +25,17 @@
|
|||||||
Content="{TemplateBinding Content}"
|
Content="{TemplateBinding Content}"
|
||||||
ContentTemplate="{TemplateBinding ContentTemplate}" />
|
ContentTemplate="{TemplateBinding ContentTemplate}" />
|
||||||
<Border
|
<Border
|
||||||
x:Name="PART_Border"
|
x:Name="PART_LoadingBorder"
|
||||||
Classes.Active="{Binding Path= IsActive, RelativeSource={RelativeSource TemplatedParent}}"
|
Classes.Active="{Binding Path= IsActive, RelativeSource={RelativeSource TemplatedParent}}"
|
||||||
IsHitTestVisible="{TemplateBinding Loading}"
|
IsHitTestVisible="{TemplateBinding IsLoading}"
|
||||||
IsVisible="{TemplateBinding Loading}"
|
Background="{DynamicResource SkeletonDefaultBackground}"
|
||||||
|
IsVisible="{TemplateBinding IsLoading}">
|
||||||
|
</Border>
|
||||||
|
<Border
|
||||||
|
x:Name="PART_ActiveBorder"
|
||||||
|
IsHitTestVisible="{TemplateBinding IsLoading}"
|
||||||
|
IsVisible="{TemplateBinding IsLoading}"
|
||||||
>
|
>
|
||||||
<Border.Styles>
|
|
||||||
<Style Selector="Border">
|
|
||||||
<Setter Property="Background" Value="{DynamicResource SkeletonDefaultBackground}"></Setter>
|
|
||||||
</Style>
|
|
||||||
<Style Selector="Border.Active">
|
|
||||||
<Style.Animations>
|
|
||||||
<Animation
|
|
||||||
FillMode="None"
|
|
||||||
IterationCount="Infinite"
|
|
||||||
Easing="CubicEaseInOut"
|
|
||||||
PlaybackDirection="Alternate"
|
|
||||||
Duration="0:0:1.4">
|
|
||||||
<KeyFrame Cue="0%">
|
|
||||||
<Setter Property="Border.Background" Value="{DynamicResource SkeletonStartAnimationBackground}" />
|
|
||||||
</KeyFrame>
|
|
||||||
<KeyFrame Cue="100%">
|
|
||||||
<Setter Property="Border.Background" Value="{DynamicResource SkeletonEndAnimationBackground}" />
|
|
||||||
</KeyFrame>
|
|
||||||
</Animation>
|
|
||||||
</Style.Animations>
|
|
||||||
</Style>
|
|
||||||
</Border.Styles>
|
|
||||||
</Border>
|
</Border>
|
||||||
</Panel>
|
</Panel>
|
||||||
</Border>
|
</Border>
|
||||||
|
|||||||
28
src/Ursa.Themes.Semi/Styles/Skeleton.axaml
Normal file
28
src/Ursa.Themes.Semi/Styles/Skeleton.axaml
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
<Styles xmlns="https://github.com/avaloniaui"
|
||||||
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||||
|
xmlns:u="https://irihi.tech/ursa">
|
||||||
|
<Design.PreviewWith>
|
||||||
|
<Border Padding="20">
|
||||||
|
<!-- Add Controls for Previewer Here -->
|
||||||
|
</Border>
|
||||||
|
</Design.PreviewWith>
|
||||||
|
|
||||||
|
<!-- Add Styles Here -->
|
||||||
|
<Style Selector="u|Skeleton[IsActive=True][IsLoading=True] /template/ Border#PART_ActiveBorder">
|
||||||
|
<Style.Animations>
|
||||||
|
<Animation
|
||||||
|
FillMode="None"
|
||||||
|
IterationCount="Infinite"
|
||||||
|
Easing="CubicEaseInOut"
|
||||||
|
PlaybackDirection="Alternate"
|
||||||
|
Duration="0:0:1.4">
|
||||||
|
<KeyFrame Cue="0%">
|
||||||
|
<Setter Property="Border.Background" Value="{DynamicResource SkeletonStartAnimationBackground}" />
|
||||||
|
</KeyFrame>
|
||||||
|
<KeyFrame Cue="100%">
|
||||||
|
<Setter Property="Border.Background" Value="{DynamicResource SkeletonEndAnimationBackground}" />
|
||||||
|
</KeyFrame>
|
||||||
|
</Animation>
|
||||||
|
</Style.Animations>
|
||||||
|
</Style>
|
||||||
|
</Styles>
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
</Border>
|
</Border>
|
||||||
</Design.PreviewWith>
|
</Design.PreviewWith>
|
||||||
<StyleInclude Source="ButtonGroup.axaml" />
|
<StyleInclude Source="ButtonGroup.axaml" />
|
||||||
|
<StyleInclude Source="Skeleton.axaml" />
|
||||||
<StyleInclude Source="ToolBar.axaml"/>
|
<StyleInclude Source="ToolBar.axaml"/>
|
||||||
<!-- Add Styles Here -->
|
<!-- Add Styles Here -->
|
||||||
</Styles>
|
</Styles>
|
||||||
|
|||||||
@@ -17,13 +17,13 @@ namespace Ursa.Controls
|
|||||||
set { SetValue(IsActiveProperty, value); }
|
set { SetValue(IsActiveProperty, value); }
|
||||||
}
|
}
|
||||||
|
|
||||||
public static readonly StyledProperty<bool> LoadingProperty =
|
public static readonly StyledProperty<bool> IsLoadingProperty =
|
||||||
AvaloniaProperty.Register<Skeleton, bool>(nameof(Loading));
|
AvaloniaProperty.Register<Skeleton, bool>(nameof(IsLoading));
|
||||||
|
|
||||||
public bool Loading
|
public bool IsLoading
|
||||||
{
|
{
|
||||||
get => GetValue(LoadingProperty);
|
get => GetValue(IsLoadingProperty);
|
||||||
set => SetValue(LoadingProperty, value);
|
set => SetValue(IsLoadingProperty, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user