AvaloniaUI рдореЗрдВ, рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрд╡рд╕рд░ред рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡реЗрдм рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЕрдиреНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреАрдЬреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдПрдирд┐рдореЗрд╢рди рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗ (рдЕрдм рдХреЗ рд▓рд┐рдП)редрдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдХреА рд╕реНрдЯрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдПрдирд┐рдореЗрд╢рди рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдФрд░ рдкрд░рд┐рдЪрдп рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдПрдХ рд╕рд░рд▓ рд▓реЛрдбрд┐рдВрдЧ рд╡рд┐рдВрдбреЛ рдмрдирд╛рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рддрд╛ рд╣реВрдВред
рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ:
рд╣рдо рд╕рдмрд╕реЗ рд╕рд░рд▓ рдПрдиреАрдореЗрд╢рди рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ:
рд╕рдорд╛рди рдПрдиреАрдореЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдПрдХ mvvm рдЕрд╡рд▓реЛрдирд┐рдпрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬреЛрдбрд╝реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗред
рд╕рдорд╛рдзрд╛рди рдореЗрдВ 2 рдлрд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝реЗрдВ:
рд╕реАрдПрд╕ рдлрд╛рдЗрд▓ рдореЗрдВ, рдмрд╕ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдПрдВ рдЬреЛ рд╣рдореЗрдВ ContentControl рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗрдЧрд╛, рдФрд░ рд╣рдордиреЗ рдЗрд╕рдореЗрдВ рдХреБрдЫ рдФрд░ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рд░рд╛ рдЬрд╛рджреВ рдХреЗрд╡рд▓ xaml рд╕реЗ рд╣реА рд╣реЛрдЧрд╛ред public class LoadRound:ContentControl
{
}
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдорд╛рд░реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдПрдиреАрдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдПрдВ:<Styles xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cc="clr-namespace:Load.Controls">
<Style Selector="cc|LoadRound">
</Style>
</Styles>
рдпрд╣рд╛рдВ рд╣рдордиреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХрд╛ рдбрд┐рдЬрд╛рдЗрди рдЙрдкрд░реЛрдХреНрдд рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реЛрдЧрд╛редрдЕрдм рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рднрд░реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреИрдирд╡рд╛рд╕ рдкрд░ рдПрдХ рд╕рд░реНрдХрд▓ рдореЗрдВ рд░рдЦреЗ рдЧрдП 8 рдХрд╛рд▓реЗ рдШреЗрд░реЗ рдЪрд╛рд╣рд┐рдПред<Style Selector="cc|LoadRound">
<Setter Property="Template">
<ControlTemplate>
<Grid ClipToBounds="True">
<ContentPresenter Name="Content"
Content="{TemplateBinding Content}"
ContentTemplate="{TemplateBinding ContentTemplate}" />
<Canvas Width="160" Height="160"
IsHitTestVisible="False">
<Ellipse Width="40" Height="40" Classes="ellipse pos_el_8" Canvas.Left="60" Canvas.Top="20"
Fill="Black" />
<Ellipse Width="40" Height="40" Classes="ellipse pos_el_7" Canvas.Left="100" Canvas.Top="40"
Fill="Black" />
<Ellipse Width="40" Height="40" Classes="ellipse pos_el_6" Canvas.Left="120" Canvas.Top="80"
Fill="Black" />
<Ellipse Width="40" Height="40" Classes="ellipse pos_el_5" Canvas.Left="100" Canvas.Top="120"
Fill="Black" />
<Ellipse Width="40" Height="40" Classes="ellipse pos_el_4" Canvas.Left="60" Canvas.Top="140"
Fill="Black" />
<Ellipse Width="40" Height="40" Classes="ellipse pos_el_3" Canvas.Left="20" Canvas.Top="120"
Fill="Black" />
<Ellipse Width="40" Height="40" Classes="ellipse pos_el_2" Canvas.Left="0" Canvas.Top="80"
Fill="Black" />
<Ellipse Width="40" Height="40" Classes="ellipse pos_el_1" Canvas.Left="20" Canvas.Top="40"
Fill="Black" />
</Canvas>
</Grid>
</ControlTemplate>
</Setter>
</Style>
рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрдерд┐рд░ рддрд╕реНрд╡реАрд░ рдорд┐рд▓рддреА рд╣реИред
рдЕрдЧрд▓рд╛, рдЖрдВрджреЛрд▓рди рдХреЛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдордВрдбрд▓рд┐рдпреЛрдВ рдХреА рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗредрдЗрд╕рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдФрд░ рд╢реИрд▓реА рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВред<Style Selector="Ellipse.pos_el_1">
<Style.Animations>
<Animation Duration="0:0:0.5" IterationCount="INFINITE">
<KeyFrame Cue="0%">
<Setter Property="Opacity" Value="0.17" />
</KeyFrame>
<KeyFrame Cue="14%">
<Setter Property="Opacity" Value="0.34" />
</KeyFrame>
<KeyFrame Cue="28%">
<Setter Property="Opacity" Value="0.50" />
</KeyFrame>
<KeyFrame Cue="42%">
<Setter Property="Opacity" Value="0.67" />
</KeyFrame>
<KeyFrame Cue="56%">
<Setter Property="Opacity" Value="0.84" />
</KeyFrame>
<KeyFrame Cue="70%">
<Setter Property="Opacity" Value="1" />
</KeyFrame>
<KeyFrame Cue="84%">
<Setter Property="Opacity" Value="0" />
</KeyFrame>
<KeyFrame Cue="100%">
<Setter Property="Opacity" Value="0.07" />
</KeyFrame>
</Animation>
</Style.Animations>
</Style>
рд╢реИрд▓реА рдХреЗ рдЕрдВрджрд░, рд╣рдордиреЗ рдХреЗрд╡рд▓ рдПрдирд┐рдореЗрд╢рди рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рдпрд╣ рд╕рд░реНрдХрд▓ рдПрдиреАрдореЗрд╢рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд% рдореЗрдВ рдХрд┐рддрдирд╛ рдкрд╛рд░рджрд░реНрд╢реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрд╡рдзрд┐ рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ, рд╣рдордиреЗ рдкреВрд░реЗ рдПрдиреАрдореЗрд╢рди рдХреА рдЕрд╡рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреА, рдФрд░ IterationCount рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рд╕рдВрдЦреНрдпрд╛ред
рдФрд░ рд╣рдореЗрдВ рдРрд╕реА рдЭрдкрдХреА рдЖрддреА рд╣реИред рдФрд░ рдЗрд╕ рдПрдиреАрдореЗрд╢рди (рд╕рднреА рд╕рдордп рдХреЗ рд╕рд╛рде) рдХреЛ рд╕рднреА рд╕рд░реНрдХрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ "рдЖрдВрджреЛрд▓рди" рдХрд╛ рдкреНрд░рднрд╛рд╡ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИредрд╣рдорд╛рд░реЗ рдирдП рдирд┐рдпрдВрддреНрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдореБрдЦреНрдп рд╡рд┐рдВрдбреЛ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЗрд╕рдХреЗ рдирд╛рдорд╕реНрдерд╛рди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛редxmlns:controls="clr-namespace:Load.Controls"
рдкреЗрдЬ рдкрд░ рд╣реА рдирд┐рдпрдВрддреНрд░рдг рдЬреЛрдбрд╝реЗрдВ<controls:LoadRound />
рдФрд░ рдЦрд┐рдбрд╝рдХреА рдХреЗ рднреАрддрд░ рдПрдХ рд╢реИрд▓реА рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдЬреЛ рд╣рдорд╛рд░реЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рджреГрд╢реНрдп рдЬреЛрдбрд╝рддрд╛ рд╣реИред <Window.Styles>
<StyleInclude Source="avares://Load/Controls/LoadRound.xaml" />
</Window.Styles>
рд╕реА # рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ , рдФрд░ рдпрд╣рд╛рдВ рдПрд╡рд▓реЛрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП ред