2026-03-27 18:59:17 -04:00
|
|
|
<UserControl xmlns="https://github.com/avaloniaui"
|
|
|
|
|
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
2026-03-28 16:54:37 -05:00
|
|
|
xmlns:sys="clr-namespace:System;assembly=System.Runtime"
|
2026-06-06 05:49:24 -05:00
|
|
|
xmlns:vm="using:LANCommander.Launcher.ViewModels"
|
|
|
|
|
xmlns:vmComponents="using:LANCommander.Launcher.ViewModels.Components"
|
|
|
|
|
xmlns:components="using:LANCommander.Launcher.Views.Components"
|
|
|
|
|
xmlns:controls="using:LANCommander.Launcher.Controls"
|
|
|
|
|
x:Class="LANCommander.Launcher.Views.GameDetailView"
|
2026-05-26 00:14:13 -05:00
|
|
|
x:DataType="vm:GameDetailViewModel"
|
|
|
|
|
>
|
2026-03-27 18:59:17 -04:00
|
|
|
|
2026-05-26 01:11:00 -05:00
|
|
|
<UserControl.Styles>
|
|
|
|
|
<Style Selector="Panel:focus-visible > Border#FocusBorder">
|
|
|
|
|
<Setter Property="IsVisible" Value="True" />
|
|
|
|
|
</Style>
|
|
|
|
|
</UserControl.Styles>
|
|
|
|
|
|
2026-05-28 00:14:22 -05:00
|
|
|
<ScrollViewer Classes="TitlebarOffset"
|
|
|
|
|
HorizontalScrollBarVisibility="Disabled"
|
2026-05-26 01:11:00 -05:00
|
|
|
GotFocus="OnScrollViewerGotFocus">
|
2026-03-27 18:59:17 -04:00
|
|
|
<Grid RowDefinitions="Auto,*">
|
2026-03-28 16:54:37 -05:00
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
<!-- ══ Hero Section (extends into title bar) ═══════════════════════ -->
|
|
|
|
|
<Border Grid.Row="0"
|
|
|
|
|
Height="340"
|
|
|
|
|
Background="Black">
|
|
|
|
|
<Panel>
|
|
|
|
|
<!-- Blurred backdrop strip behind titlebar -->
|
|
|
|
|
<Border VerticalAlignment="Top"
|
|
|
|
|
Height="60"
|
|
|
|
|
ClipToBounds="True"
|
|
|
|
|
IsHitTestVisible="False"
|
|
|
|
|
IsVisible="{Binding BackgroundPath, Converter={x:Static StringConverters.IsNotNullOrEmpty}}">
|
|
|
|
|
<Panel>
|
2026-07-04 03:33:13 -05:00
|
|
|
<Image controls:AsyncImage.Source="{Binding BackgroundPath}"
|
|
|
|
|
controls:AsyncImage.DecodeWidth="1600"
|
2026-04-07 23:07:51 -05:00
|
|
|
Stretch="UniformToFill">
|
|
|
|
|
<Image.Effect>
|
|
|
|
|
<BlurEffect Radius="24" />
|
|
|
|
|
</Image.Effect>
|
|
|
|
|
</Image>
|
|
|
|
|
<Border Background="#33000000" />
|
|
|
|
|
</Panel>
|
|
|
|
|
</Border>
|
2026-03-27 18:59:17 -04:00
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
<!-- Background image -->
|
2026-07-04 03:33:13 -05:00
|
|
|
<Image controls:AsyncImage.Source="{Binding BackgroundPath}"
|
|
|
|
|
controls:AsyncImage.DecodeWidth="1600"
|
2026-04-07 23:07:51 -05:00
|
|
|
Stretch="UniformToFill"
|
|
|
|
|
IsVisible="{Binding BackgroundPath, Converter={x:Static StringConverters.IsNotNullOrEmpty}}" />
|
2026-03-27 18:59:17 -04:00
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
<!-- Top fade gradient -->
|
|
|
|
|
<Border VerticalAlignment="Top"
|
|
|
|
|
Height="120"
|
|
|
|
|
IsHitTestVisible="False">
|
|
|
|
|
<Border.Background>
|
|
|
|
|
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
|
|
|
|
|
<GradientStop Color="#55000000" Offset="0" />
|
|
|
|
|
<GradientStop Color="#00000000" Offset="1" />
|
|
|
|
|
</LinearGradientBrush>
|
|
|
|
|
</Border.Background>
|
|
|
|
|
</Border>
|
2026-03-27 18:59:17 -04:00
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
<!-- Bottom fade gradient -->
|
|
|
|
|
<Border VerticalAlignment="Bottom"
|
|
|
|
|
Height="128"
|
|
|
|
|
IsHitTestVisible="False">
|
|
|
|
|
<Border.Background>
|
|
|
|
|
<LinearGradientBrush StartPoint="0%,0%" EndPoint="0%,100%">
|
|
|
|
|
<GradientStop Color="#00000000" Offset="0" />
|
|
|
|
|
<GradientStop Color="#FF000000" Offset="1" />
|
|
|
|
|
</LinearGradientBrush>
|
|
|
|
|
</Border.Background>
|
|
|
|
|
</Border>
|
|
|
|
|
|
|
|
|
|
<!-- Back button (overlaid at top-left, below title bar) -->
|
|
|
|
|
<IconButton Command="{Binding GoBackCommand}"
|
|
|
|
|
Text="{Binding BackLabel}"
|
2026-04-11 01:02:21 +02:00
|
|
|
Classes="Glass Dark"
|
2026-04-07 23:07:51 -05:00
|
|
|
HorizontalAlignment="Left"
|
2026-03-27 18:59:17 -04:00
|
|
|
VerticalAlignment="Top"
|
2026-04-07 23:07:51 -05:00
|
|
|
Margin="16, 48, 0, 0"
|
|
|
|
|
IconType="Regular"
|
|
|
|
|
IconValue="CaretLeft"
|
2026-04-10 21:34:56 +02:00
|
|
|
Size="16"
|
|
|
|
|
ZIndex="2"
|
|
|
|
|
IsHitTestVisible="True" />
|
2026-04-07 23:07:51 -05:00
|
|
|
|
|
|
|
|
<!-- Logo (bottom-left) -->
|
|
|
|
|
<Border HorizontalAlignment="Stretch"
|
|
|
|
|
VerticalAlignment="Stretch"
|
|
|
|
|
Margin="48,0,0,64"
|
|
|
|
|
ClipToBounds="True">
|
|
|
|
|
<Viewbox Stretch="Uniform"
|
|
|
|
|
HorizontalAlignment="Left"
|
|
|
|
|
VerticalAlignment="Bottom"
|
|
|
|
|
MaxWidth="{Binding Bounds.Width, RelativeSource={RelativeSource AncestorType=Border}, Converter={StaticResource MultiplyConverter}, ConverterParameter=0.33}"
|
|
|
|
|
MaxHeight="{Binding Bounds.Height, RelativeSource={RelativeSource AncestorType=Border}, Converter={StaticResource MultiplyConverter}, ConverterParameter=0.5}">
|
2026-07-04 03:33:13 -05:00
|
|
|
<Image controls:AsyncImage.Source="{Binding LogoPath}"
|
2026-04-07 23:07:51 -05:00
|
|
|
Stretch="Uniform"
|
|
|
|
|
HorizontalAlignment="Left"
|
|
|
|
|
VerticalAlignment="Bottom" />
|
|
|
|
|
</Viewbox>
|
|
|
|
|
</Border>
|
|
|
|
|
|
|
|
|
|
<!-- Title fallback when no logo (bottom-left) -->
|
|
|
|
|
<TextBlock HorizontalAlignment="Left"
|
|
|
|
|
VerticalAlignment="Bottom"
|
|
|
|
|
Margin="24,0,0,28"
|
|
|
|
|
Text="{Binding Title}"
|
|
|
|
|
FontSize="32"
|
|
|
|
|
FontWeight="Bold"
|
|
|
|
|
Foreground="White"
|
|
|
|
|
IsVisible="{Binding LogoPath, Converter={x:Static StringConverters.IsNullOrEmpty}}" />
|
|
|
|
|
</Panel>
|
|
|
|
|
</Border>
|
2026-03-27 18:59:17 -04:00
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
<!-- ══ Game Details Content ══════════════════════════════════════════ -->
|
|
|
|
|
<Grid Grid.Row="1" ColumnDefinitions="*,Auto">
|
2026-04-01 01:39:54 -05:00
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
<!-- Left: Action Bar, Metadata -->
|
2026-05-26 01:11:00 -05:00
|
|
|
<StackPanel x:Name="LeftContent" Grid.Column="0" Margin="24,24,0,24" Spacing="16">
|
2026-04-01 01:39:54 -05:00
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
<!-- Game Action Bar Component -->
|
|
|
|
|
<components:GameActionBarView DataContext="{Binding ActionBar}" />
|
|
|
|
|
|
|
|
|
|
<!-- Description -->
|
2026-04-30 02:53:19 -05:00
|
|
|
<controls:MarkdownTextBlock Text="{Binding Description}"
|
|
|
|
|
IsVisible="{Binding Description, Converter={x:Static StringConverters.IsNotNullOrEmpty}}" />
|
2026-03-27 18:59:17 -04:00
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
<!-- Screenshots / Videos carousel -->
|
2026-05-26 01:11:00 -05:00
|
|
|
<StackPanel x:Name="MediaSection" Spacing="8" IsVisible="{Binding HasMedia}">
|
2026-04-07 23:07:51 -05:00
|
|
|
<TextBlock Text="Media" FontWeight="SemiBold" FontSize="14" Opacity="0.7" />
|
|
|
|
|
<CarouselControl ItemsSource="{Binding MediaItems}"
|
|
|
|
|
ItemWidth="384"
|
|
|
|
|
VisibleItems="2"
|
|
|
|
|
Gap="12">
|
|
|
|
|
<CarouselControl.ItemTemplate>
|
|
|
|
|
<DataTemplate x:DataType="vmComponents:GameMediaItemViewModel">
|
2026-05-10 01:44:23 -05:00
|
|
|
<Panel Width="384" Height="216"
|
2026-05-26 01:11:00 -05:00
|
|
|
Focusable="True"
|
2026-05-10 01:44:23 -05:00
|
|
|
Tapped="MediaItem_Tapped"
|
2026-05-26 01:11:00 -05:00
|
|
|
KeyDown="MediaItem_KeyDown"
|
2026-05-10 01:44:23 -05:00
|
|
|
Cursor="Hand">
|
|
|
|
|
<!-- Skeleton placeholder -->
|
|
|
|
|
<Border CornerRadius="4"
|
|
|
|
|
Background="#15FFFFFF"
|
|
|
|
|
IsVisible="{Binding IsSkeleton}" />
|
2026-04-07 23:07:51 -05:00
|
|
|
<!-- Screenshot image -->
|
|
|
|
|
<Border CornerRadius="4" ClipToBounds="True"
|
|
|
|
|
IsVisible="{Binding !IsVideo}">
|
2026-04-26 02:14:45 -05:00
|
|
|
<Image Source="{Binding ImageSource}"
|
2026-04-07 23:07:51 -05:00
|
|
|
Stretch="UniformToFill" />
|
|
|
|
|
</Border>
|
2026-06-15 19:31:58 -05:00
|
|
|
<!-- Video: muted autoplay, click to open lightbox.
|
|
|
|
|
A ContentControl whose Content is the video path (null
|
|
|
|
|
for screenshots) only realizes its template when non-null,
|
|
|
|
|
so screenshots never instantiate an InlineVideoPlayer/libvlc. -->
|
|
|
|
|
<ContentControl Content="{Binding VideoPath}">
|
|
|
|
|
<ContentControl.ContentTemplate>
|
|
|
|
|
<DataTemplate x:DataType="sys:String">
|
|
|
|
|
<Border CornerRadius="4" ClipToBounds="True"
|
|
|
|
|
Background="Black">
|
|
|
|
|
<InlineVideoPlayer VideoPath="{Binding}" />
|
|
|
|
|
</Border>
|
|
|
|
|
</DataTemplate>
|
|
|
|
|
</ContentControl.ContentTemplate>
|
|
|
|
|
</ContentControl>
|
2026-05-26 01:11:00 -05:00
|
|
|
<!-- Focus indicator -->
|
|
|
|
|
<Border Name="FocusBorder"
|
|
|
|
|
CornerRadius="4"
|
|
|
|
|
BorderThickness="2"
|
|
|
|
|
BorderBrush="#994096FF"
|
|
|
|
|
IsVisible="False" />
|
2026-04-07 23:07:51 -05:00
|
|
|
</Panel>
|
|
|
|
|
</DataTemplate>
|
|
|
|
|
</CarouselControl.ItemTemplate>
|
|
|
|
|
</CarouselControl>
|
|
|
|
|
</StackPanel>
|
2026-03-27 18:59:17 -04:00
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
</StackPanel>
|
2026-03-27 18:59:17 -04:00
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
<!-- Right: Cover Image + Metadata -->
|
2026-05-26 01:11:00 -05:00
|
|
|
<StackPanel x:Name="MetadataPanel" Grid.Column="1"
|
2026-04-07 23:07:51 -05:00
|
|
|
Width="280"
|
|
|
|
|
Margin="16,-100,24,24"
|
|
|
|
|
Spacing="16"
|
|
|
|
|
VerticalAlignment="Top"
|
|
|
|
|
ZIndex="1">
|
2026-03-27 18:59:17 -04:00
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
<!-- Cover Image -->
|
2026-04-19 12:55:23 -05:00
|
|
|
<components:Cover Source="{Binding CoverPath}"
|
2026-04-30 23:47:15 -05:00
|
|
|
MimeType="{Binding CoverMimeType}"
|
|
|
|
|
Title="{Binding Title}"
|
|
|
|
|
AlwaysAnimate="True" />
|
2026-03-27 18:59:17 -04:00
|
|
|
|
2026-04-09 21:50:28 -05:00
|
|
|
<!-- Players -->
|
|
|
|
|
<StackPanel Classes="Badges"
|
|
|
|
|
IsVisible="{Binding HasPlayerInfo}">
|
|
|
|
|
<TextBlock Text="Players" Classes="Header" />
|
|
|
|
|
<WrapPanel Orientation="Horizontal">
|
|
|
|
|
<Border Margin="0,0,6,6" Padding="10,5" CornerRadius="4" Background="#22FFFFFF"
|
|
|
|
|
IsVisible="{Binding Singleplayer}">
|
|
|
|
|
<TextBlock Text="Singleplayer" FontSize="12" />
|
|
|
|
|
</Border>
|
|
|
|
|
<ItemsControl ItemsSource="{Binding MultiplayerModeDetails}">
|
|
|
|
|
<ItemsControl.ItemsPanel>
|
|
|
|
|
<ItemsPanelTemplate>
|
|
|
|
|
<WrapPanel Orientation="Horizontal" />
|
|
|
|
|
</ItemsPanelTemplate>
|
|
|
|
|
</ItemsControl.ItemsPanel>
|
|
|
|
|
<ItemsControl.ItemTemplate>
|
|
|
|
|
<DataTemplate x:DataType="sys:String">
|
|
|
|
|
<Border Margin="0,0,6,6"
|
|
|
|
|
Padding="10,5"
|
|
|
|
|
CornerRadius="4"
|
|
|
|
|
Background="#22FFFFFF">
|
|
|
|
|
<TextBlock Text="{Binding}" FontSize="12" />
|
|
|
|
|
</Border>
|
|
|
|
|
</DataTemplate>
|
|
|
|
|
</ItemsControl.ItemTemplate>
|
|
|
|
|
</ItemsControl>
|
|
|
|
|
</WrapPanel>
|
|
|
|
|
</StackPanel>
|
|
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
<!-- Developers -->
|
|
|
|
|
<StackPanel Classes="Badges"
|
|
|
|
|
IsVisible="{Binding Developers, Converter={x:Static StringConverters.IsNotNullOrEmpty}}">
|
|
|
|
|
<TextBlock Text="Developers" Classes="Header" />
|
|
|
|
|
<ItemsControl ItemsSource="{Binding DeveloperList}">
|
|
|
|
|
<ItemsControl.ItemsPanel>
|
|
|
|
|
<ItemsPanelTemplate>
|
|
|
|
|
<WrapPanel Orientation="Horizontal" />
|
|
|
|
|
</ItemsPanelTemplate>
|
|
|
|
|
</ItemsControl.ItemsPanel>
|
|
|
|
|
<ItemsControl.ItemTemplate>
|
|
|
|
|
<DataTemplate x:DataType="sys:String">
|
|
|
|
|
<Button Classes="Badge"
|
|
|
|
|
Command="{Binding $parent[UserControl].((vm:GameDetailViewModel)DataContext).SearchForCommand}"
|
|
|
|
|
CommandParameter="{Binding}">
|
|
|
|
|
<TextBlock Text="{Binding}" />
|
|
|
|
|
</Button>
|
|
|
|
|
</DataTemplate>
|
|
|
|
|
</ItemsControl.ItemTemplate>
|
|
|
|
|
</ItemsControl>
|
|
|
|
|
</StackPanel>
|
2026-03-27 18:59:17 -04:00
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
<!-- Publishers -->
|
|
|
|
|
<StackPanel Classes="Badges"
|
|
|
|
|
IsVisible="{Binding Publishers, Converter={x:Static StringConverters.IsNotNullOrEmpty}}">
|
|
|
|
|
<TextBlock Text="Publishers" Classes="Header" />
|
|
|
|
|
<ItemsControl ItemsSource="{Binding PublisherList}">
|
|
|
|
|
<ItemsControl.ItemsPanel>
|
|
|
|
|
<ItemsPanelTemplate>
|
|
|
|
|
<WrapPanel Orientation="Horizontal" />
|
|
|
|
|
</ItemsPanelTemplate>
|
|
|
|
|
</ItemsControl.ItemsPanel>
|
|
|
|
|
<ItemsControl.ItemTemplate>
|
|
|
|
|
<DataTemplate x:DataType="sys:String">
|
|
|
|
|
<Button Classes="Badge"
|
|
|
|
|
Command="{Binding $parent[UserControl].((vm:GameDetailViewModel)DataContext).SearchForCommand}"
|
|
|
|
|
CommandParameter="{Binding}">
|
|
|
|
|
<TextBlock Text="{Binding}" />
|
|
|
|
|
</Button>
|
|
|
|
|
</DataTemplate>
|
|
|
|
|
</ItemsControl.ItemTemplate>
|
|
|
|
|
</ItemsControl>
|
|
|
|
|
</StackPanel>
|
2026-03-27 18:59:17 -04:00
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
<!-- Genres -->
|
|
|
|
|
<StackPanel Classes="Badges"
|
|
|
|
|
IsVisible="{Binding Genres, Converter={x:Static StringConverters.IsNotNullOrEmpty}}">
|
|
|
|
|
<TextBlock Text="Genres" Classes="Header" />
|
|
|
|
|
<ItemsControl ItemsSource="{Binding GenreList}">
|
|
|
|
|
<ItemsControl.ItemsPanel>
|
|
|
|
|
<ItemsPanelTemplate>
|
|
|
|
|
<WrapPanel Orientation="Horizontal" />
|
|
|
|
|
</ItemsPanelTemplate>
|
|
|
|
|
</ItemsControl.ItemsPanel>
|
|
|
|
|
<ItemsControl.ItemTemplate>
|
|
|
|
|
<DataTemplate x:DataType="sys:String">
|
|
|
|
|
<Button Classes="Badge"
|
|
|
|
|
Command="{Binding $parent[UserControl].((vm:GameDetailViewModel)DataContext).SearchForCommand}"
|
|
|
|
|
CommandParameter="{Binding}">
|
|
|
|
|
<TextBlock Text="{Binding}" />
|
|
|
|
|
</Button>
|
|
|
|
|
</DataTemplate>
|
|
|
|
|
</ItemsControl.ItemTemplate>
|
|
|
|
|
</ItemsControl>
|
|
|
|
|
</StackPanel>
|
|
|
|
|
|
|
|
|
|
<!-- Tags — limited to 5, expandable -->
|
|
|
|
|
<StackPanel Classes="Badges"
|
|
|
|
|
IsVisible="{Binding Tags, Converter={x:Static StringConverters.IsNotNullOrEmpty}}">
|
|
|
|
|
<TextBlock Text="Tags" Classes="Header" />
|
|
|
|
|
<WrapPanel Orientation="Horizontal">
|
|
|
|
|
<ItemsControl ItemsSource="{Binding VisibleTagList}">
|
2026-03-28 16:54:37 -05:00
|
|
|
<ItemsControl.ItemsPanel>
|
|
|
|
|
<ItemsPanelTemplate>
|
|
|
|
|
<WrapPanel Orientation="Horizontal" />
|
|
|
|
|
</ItemsPanelTemplate>
|
|
|
|
|
</ItemsControl.ItemsPanel>
|
|
|
|
|
<ItemsControl.ItemTemplate>
|
|
|
|
|
<DataTemplate x:DataType="sys:String">
|
2026-04-07 23:07:51 -05:00
|
|
|
<Button Classes="Badge"
|
2026-03-28 16:54:37 -05:00
|
|
|
Command="{Binding $parent[UserControl].((vm:GameDetailViewModel)DataContext).SearchForCommand}"
|
|
|
|
|
CommandParameter="{Binding}">
|
2026-04-07 23:07:51 -05:00
|
|
|
<TextBlock Text="{Binding}" />
|
2026-03-28 16:54:37 -05:00
|
|
|
</Button>
|
|
|
|
|
</DataTemplate>
|
|
|
|
|
</ItemsControl.ItemTemplate>
|
|
|
|
|
</ItemsControl>
|
2026-03-27 18:59:17 -04:00
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
<Button Classes="Badge Primary"
|
|
|
|
|
IsVisible="{Binding HasMoreTags}"
|
|
|
|
|
Command="{Binding ToggleTagsExpandedCommand}">
|
|
|
|
|
<TextBlock Text="{Binding ShowMoreTagsLabel}" />
|
|
|
|
|
</Button>
|
|
|
|
|
</WrapPanel>
|
2026-03-27 18:59:17 -04:00
|
|
|
</StackPanel>
|
|
|
|
|
|
2026-05-14 00:28:31 -05:00
|
|
|
<!-- Tools -->
|
|
|
|
|
<StackPanel Classes="Badges"
|
|
|
|
|
IsVisible="{Binding HasTools}">
|
|
|
|
|
<TextBlock Text="Tools" Classes="Header" />
|
|
|
|
|
<ItemsControl ItemsSource="{Binding Tools}">
|
|
|
|
|
<ItemsControl.ItemTemplate>
|
|
|
|
|
<DataTemplate x:DataType="vm:ToolItemViewModel">
|
|
|
|
|
<Border Margin="0,0,0,6"
|
|
|
|
|
Padding="10,5"
|
|
|
|
|
CornerRadius="4"
|
|
|
|
|
Background="#22FFFFFF">
|
|
|
|
|
<Grid ColumnDefinitions="*,Auto">
|
|
|
|
|
<TextBlock Grid.Column="0"
|
|
|
|
|
Text="{Binding Name}"
|
|
|
|
|
FontSize="12"
|
|
|
|
|
VerticalAlignment="Center" />
|
|
|
|
|
<TextBlock Grid.Column="1"
|
|
|
|
|
Text="Installed"
|
|
|
|
|
FontSize="11"
|
|
|
|
|
Opacity="0.6"
|
|
|
|
|
VerticalAlignment="Center"
|
|
|
|
|
IsVisible="{Binding IsInstalled}" />
|
|
|
|
|
</Grid>
|
|
|
|
|
</Border>
|
|
|
|
|
</DataTemplate>
|
|
|
|
|
</ItemsControl.ItemTemplate>
|
|
|
|
|
</ItemsControl>
|
|
|
|
|
</StackPanel>
|
|
|
|
|
|
2026-04-07 23:07:51 -05:00
|
|
|
</StackPanel>
|
|
|
|
|
|
2026-03-27 18:59:17 -04:00
|
|
|
</Grid>
|
2026-04-07 23:07:51 -05:00
|
|
|
|
|
|
|
|
</Grid>
|
2026-03-27 18:59:17 -04:00
|
|
|
</ScrollViewer>
|
|
|
|
|
</UserControl>
|