Files
better-genshin-impact/BetterGenshinImpact/View/MaskWindow.xaml
2026-02-03 21:51:17 +08:00

1005 lines
63 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<Window x:Class="BetterGenshinImpact.View.MaskWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ui="http://schemas.lepo.co/wpfui/2022/xaml"
xmlns:viewModel="clr-namespace:BetterGenshinImpact.ViewModel"
xmlns:platform="clr-namespace:BetterGenshinImpact.Platform.Wine"
xmlns:overlay="clr-namespace:BetterGenshinImpact.View.Controls.Overlay"
xmlns:converters="clr-namespace:BetterGenshinImpact.View.Converters"
xmlns:controls="clr-namespace:BetterGenshinImpact.View.Controls"
xmlns:gif="https://github.com/XamlAnimatedGif/XamlAnimatedGif"
xmlns:sys="clr-namespace:System;assembly=System.Runtime"
Title="MaskWindow"
Width="500"
Height="800"
d:DesignWidth="1920"
d:DesignHeight="1080"
AllowsTransparency="True"
FontFamily="{DynamicResource TextThemeFontFamily}"
ShowActivated="False"
ShowInTaskbar="False"
Topmost="True"
WindowStyle="None"
mc:Ignorable="d">
<Window.DataContext>
<viewModel:MaskWindowViewModel />
</Window.DataContext>
<b:Interaction.Triggers>
<b:EventTrigger EventName="Loaded">
<b:InvokeCommandAction Command="{Binding LoadedCommand}" CommandParameter="{Binding}" />
</b:EventTrigger>
<b:EventTrigger EventName="SizeChanged">
<b:InvokeCommandAction Command="{Binding WindowSizeChangedCommand}" PassEventArgsToCommand="True" />
</b:EventTrigger>
</b:Interaction.Triggers>
<Window.Background>
<SolidColorBrush Opacity="0.00001" Color="Transparent" />
</Window.Background>
<Window.Style>
<Style TargetType="Window">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Window">
<ContentPresenter />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Style>
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/View/Controls/Overlay/AdjustableOverlayItemStyles.xaml" />
</ResourceDictionary.MergedDictionaries>
<converters:OverlayRelativeOrAbsoluteConverter x:Key="OverlayRelativeOrAbsoluteConverter" />
<sys:Double x:Key="MapPointPickerHeightRatio">0.62</sys:Double>
<sys:Double x:Key="MapPointPickerVerticalOffset">-12</sys:Double>
</ResourceDictionary>
</Window.Resources>
<AdornerDecorator ClipToBounds="True">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20*" />
<ColumnDefinition Width="23*" />
<ColumnDefinition Width="250*" />
<ColumnDefinition Width="1392*" />
<ColumnDefinition Width="178*" />
<ColumnDefinition Width="57*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="1020*" />
<RowDefinition Height="33*" />
<RowDefinition Height="22*" />
<RowDefinition Height="5*" />
</Grid.RowDefinitions>
<Canvas Grid.Row="0"
Grid.RowSpan="4"
Grid.Column="0"
Grid.ColumnSpan="6"
ClipToBounds="True">
<overlay:AdjustableOverlayItem x:Name="StatusWrapper"
Padding="4,2"
Background="#00000000"
BorderBrush="#33000000"
BorderThickness="0"
MinWidth="160"
MinHeight="24"
IsEditEnabled="{Binding Config.MaskWindowConfig.OverlayLayoutEditEnabled}"
LayoutKey="StatusList"
Visibility="{Binding Config.MaskWindowConfig.ShowStatus, Converter={StaticResource BooleanToVisibilityConverter}}">
<Canvas.Left>
<MultiBinding Converter="{StaticResource OverlayRelativeOrAbsoluteConverter}">
<Binding Path="Config.MaskWindowConfig.StatusListLeftRatio" />
<Binding RelativeSource="{RelativeSource AncestorType=Window}" Path="ActualWidth" />
</MultiBinding>
</Canvas.Left>
<Canvas.Top>
<MultiBinding Converter="{StaticResource OverlayRelativeOrAbsoluteConverter}">
<Binding Path="Config.MaskWindowConfig.StatusListTopRatio" />
<Binding RelativeSource="{RelativeSource AncestorType=Window}" Path="ActualHeight" />
</MultiBinding>
</Canvas.Top>
<overlay:AdjustableOverlayItem.Width>
<MultiBinding Converter="{StaticResource OverlayRelativeOrAbsoluteConverter}">
<Binding Path="Config.MaskWindowConfig.StatusListWidthRatio" />
<Binding RelativeSource="{RelativeSource AncestorType=Window}" Path="ActualWidth" />
</MultiBinding>
</overlay:AdjustableOverlayItem.Width>
<overlay:AdjustableOverlayItem.Height>
<MultiBinding Converter="{StaticResource OverlayRelativeOrAbsoluteConverter}">
<Binding Path="Config.MaskWindowConfig.StatusListHeightRatio" />
<Binding RelativeSource="{RelativeSource AncestorType=Window}" Path="ActualHeight" />
</MultiBinding>
</overlay:AdjustableOverlayItem.Height>
<b:Interaction.Triggers>
<b:EventTrigger EventName="LayoutCommitted">
<b:InvokeCommandAction Command="{Binding OverlayLayoutCommittedCommand}"
PassEventArgsToCommand="True" />
</b:EventTrigger>
<b:EventTrigger EventName="PreviewMouseRightButtonDown">
<b:InvokeCommandAction Command="{Binding ExitOverlayLayoutEditModeCommand}" />
</b:EventTrigger>
</b:Interaction.Triggers>
<overlay:AdjustableOverlayItem.Effect>
<DropShadowEffect Opacity="0.4" BlurRadius="4" ShadowDepth="0" Color="LightGray" />
</overlay:AdjustableOverlayItem.Effect>
<ui:ListView ItemsSource="{Binding StatusList}"
Background="Transparent"
BorderThickness="0"
d:ItemsSource="{d:SampleData}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Focusable" Value="False" />
<Setter Property="IsHitTestVisible" Value="False" />
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<StackPanel.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="0,0,8,0" />
</Style>
</StackPanel.Resources>
<TextBlock FontFamily="{StaticResource FgiIconFontFamily}"
FontSize="12"
Text="{Binding Name}">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="LightGray"
Opacity="{Binding DataContext.Config.MaskWindowConfig.TextOpacity, RelativeSource={RelativeSource AncestorType=Window}}" />
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding IsEnabled}" Value="True">
<Setter Property="Foreground">
<Setter.Value>
<SolidColorBrush Color="LightGreen"
Opacity="{Binding DataContext.Config.MaskWindowConfig.TextOpacity, RelativeSource={RelativeSource AncestorType=Window}}" />
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ui:ListView>
</overlay:AdjustableOverlayItem>
<overlay:AdjustableOverlayItem x:Name="LogTextBoxWrapper"
Padding="0"
Background="#00000000"
BorderBrush="#33000000"
BorderThickness="0"
MinWidth="240"
MinHeight="80"
IsEditEnabled="{Binding Config.MaskWindowConfig.OverlayLayoutEditEnabled}"
LayoutKey="LogTextBox"
Visibility="{Binding Config.MaskWindowConfig.ShowLogBox, Converter={StaticResource BooleanToVisibilityConverter}}">
<Canvas.Left>
<MultiBinding Converter="{StaticResource OverlayRelativeOrAbsoluteConverter}">
<Binding Path="Config.MaskWindowConfig.LogTextBoxLeftRatio" />
<Binding RelativeSource="{RelativeSource AncestorType=Window}" Path="ActualWidth" />
</MultiBinding>
</Canvas.Left>
<Canvas.Top>
<MultiBinding Converter="{StaticResource OverlayRelativeOrAbsoluteConverter}">
<Binding Path="Config.MaskWindowConfig.LogTextBoxTopRatio" />
<Binding RelativeSource="{RelativeSource AncestorType=Window}" Path="ActualHeight" />
</MultiBinding>
</Canvas.Top>
<overlay:AdjustableOverlayItem.Width>
<MultiBinding Converter="{StaticResource OverlayRelativeOrAbsoluteConverter}">
<Binding Path="Config.MaskWindowConfig.LogTextBoxWidthRatio" />
<Binding RelativeSource="{RelativeSource AncestorType=Window}" Path="ActualWidth" />
</MultiBinding>
</overlay:AdjustableOverlayItem.Width>
<overlay:AdjustableOverlayItem.Height>
<MultiBinding Converter="{StaticResource OverlayRelativeOrAbsoluteConverter}">
<Binding Path="Config.MaskWindowConfig.LogTextBoxHeightRatio" />
<Binding RelativeSource="{RelativeSource AncestorType=Window}" Path="ActualHeight" />
</MultiBinding>
</overlay:AdjustableOverlayItem.Height>
<b:Interaction.Triggers>
<b:EventTrigger EventName="LayoutCommitted">
<b:InvokeCommandAction Command="{Binding OverlayLayoutCommittedCommand}"
PassEventArgsToCommand="True" />
</b:EventTrigger>
<b:EventTrigger EventName="PreviewMouseRightButtonDown">
<b:InvokeCommandAction Command="{Binding ExitOverlayLayoutEditModeCommand}" />
</b:EventTrigger>
</b:Interaction.Triggers>
<overlay:AdjustableOverlayItem.Effect>
<DropShadowEffect Opacity="0.4" BlurRadius="4" ShadowDepth="0" />
</overlay:AdjustableOverlayItem.Effect>
<RichTextBox x:Name="LogTextBox"
Padding="0,5,0,0"
Background="Transparent"
BorderThickness="0"
FontFamily="Cascadia Mono, Consolas, Courier New, monospace, /Resources/Fonts/MiSans-Regular.ttf#MiSans"
FontSize="12"
IsHitTestVisible="False"
VerticalScrollBarVisibility="Hidden"
Opacity="{Binding Config.MaskWindowConfig.TextOpacity}">
<RichTextBox.Foreground>
<SolidColorBrush Color="LightGray" />
</RichTextBox.Foreground>
<d:FlowDocument FontFamily="{Binding FontFamily, ElementName=LogTextBox}"
FontSize="{Binding FontSize, ElementName=LogTextBox}">
<Paragraph>
<Run>[00:00:00 INF] 更好的原神</Run>
<LineBreak />
<Run>[00:00:00 INF] 遮罩窗口已启动游戏大小1920x1080素材缩放1.00DPI缩放1</Run>
<LineBreak />
<Run>[00:00:01 INF] Never gonna give you up</Run>
<LineBreak />
<Run>[00:00:01 INF] Never gonna let you down</Run>
</Paragraph>
</d:FlowDocument>
</RichTextBox>
</overlay:AdjustableOverlayItem>
</Canvas>
<Grid Grid.Row="0"
Grid.RowSpan="4"
Grid.Column="0"
Grid.ColumnSpan="6"
IsHitTestVisible="False"
Panel.ZIndex="999"
Visibility="{Binding Config.MaskWindowConfig.OverlayLayoutEditEnabled, Converter={StaticResource BooleanToVisibilityConverter}}">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="当前处于编辑模式"
FontSize="72"
FontWeight="DemiBold"
Foreground="#CCFFFFFF"
HorizontalAlignment="Center">
<TextBlock.Effect>
<DropShadowEffect Opacity="0.8" BlurRadius="10" ShadowDepth="0" />
</TextBlock.Effect>
</TextBlock>
<TextBlock Text="可以调整日志框、状态栏控件的位置和大小"
Margin="0,8,0,0"
FontSize="22"
FontWeight="SemiBold"
Foreground="#CCFFFFFF"
HorizontalAlignment="Center">
<TextBlock.Effect>
<DropShadowEffect Opacity="0.8" BlurRadius="10" ShadowDepth="0" />
</TextBlock.Effect>
</TextBlock>
<TextBlock Text="右键相关控件可退出编辑状态"
Margin="0,8,0,0"
FontSize="22"
FontWeight="SemiBold"
Foreground="#CCFFFFFF"
HorizontalAlignment="Center">
<TextBlock.Effect>
<DropShadowEffect Opacity="0.8" BlurRadius="10" ShadowDepth="0" />
</TextBlock.Effect>
</TextBlock>
</StackPanel>
</Grid>
<!-- uid遮盖 -->
<Rectangle Grid.Column="4"
Grid.Row="2"
Fill="White"
IsHitTestVisible="False"
Visibility="{Binding Config.MaskWindowConfig.UidCoverEnabled, Converter={StaticResource BooleanToVisibilityConverter}}" />
<!-- 方位 -->
<Viewbox Grid.Column="2" Grid.Row="0"
IsHitTestVisible="False"
HorizontalAlignment="Left" VerticalAlignment="Top">
<Grid Width="250" Height="250"
Visibility="{Binding Config.MaskWindowConfig.DirectionsEnabled, Converter={StaticResource BooleanToVisibilityConverter}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.Effect>
<DropShadowEffect Opacity="0.4" BlurRadius="8" ShadowDepth="0" />
</Grid.Effect>
<TextBlock Grid.Column="0"
Grid.Row="2"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="-24,0,0,0"
FontSize="34"
FontStretch="Medium"
FontWeight="DemiBold"
Text="西">
<TextBlock.Foreground>
<SolidColorBrush Color="White" Opacity="{Binding Config.MaskWindowConfig.TextOpacity}" />
</TextBlock.Foreground>
</TextBlock>
<TextBlock Grid.Column="2"
Grid.Row="4"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0,0,0,-24"
FontSize="34"
FontStretch="Medium"
FontWeight="DemiBold"
Text="南">
<TextBlock.Foreground>
<SolidColorBrush Color="White" Opacity="{Binding Config.MaskWindowConfig.TextOpacity}" />
</TextBlock.Foreground>
</TextBlock>
<TextBlock Grid.Column="4"
Grid.Row="2"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0,0,-24,0"
FontSize="34"
FontStretch="Medium"
FontWeight="DemiBold"
Text="东">
<TextBlock.Foreground>
<SolidColorBrush Color="White" Opacity="{Binding Config.MaskWindowConfig.TextOpacity}" />
</TextBlock.Foreground>
</TextBlock>
<TextBlock Grid.Column="2"
Grid.Row="0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="0,-24,0,0"
FontSize="34"
FontStretch="Medium"
FontWeight="DemiBold"
Text="北">
<TextBlock.Foreground>
<SolidColorBrush Color="White" Opacity="{Binding Config.MaskWindowConfig.TextOpacity}" />
</TextBlock.Foreground>
</TextBlock>
</Grid>
</Viewbox>
<!-- 展示FPS -->
<Border Margin="4,4,0,0"
Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="3"
HorizontalAlignment="Left" VerticalAlignment="Top"
Background="#00000000"
CornerRadius="4"
Opacity="0.5"
IsHitTestVisible="False"
Visibility="{Binding Config.MaskWindowConfig.ShowFps, Converter={StaticResource BooleanToVisibilityConverter}}">
<TextBlock HorizontalAlignment="Center"
VerticalAlignment="Center"
FontFamily="{StaticResource DigitalThemeFontFamily}"
FontSize="16"
Text="{Binding Fps}">
<TextBlock.Foreground>
<SolidColorBrush Color="White" Opacity="{Binding Config.MaskWindowConfig.TextOpacity}" />
</TextBlock.Foreground>
</TextBlock>
</Border>
<!-- 用于支持wine -->
<Border Grid.Row="0" Grid.Column="0"
Grid.RowSpan="4" Grid.ColumnSpan="6"
IsHitTestVisible="False">
<Border.Style>
<Style TargetType="Border">
<Setter Property="Visibility" Value="Collapsed" />
<Setter Property="Background" Value="Transparent" />
<Style.Triggers>
<DataTrigger
Binding="{Binding Source={x:Static platform:WinePlatformAddon.IsRunningOnWine}}"
Value="True">
<Setter Property="Visibility" Value="Visible" />
<Setter Property="Background" Value="#11000000" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
</Border>
<controls:PointsCanvas Grid.Row="0" Grid.Column="0" Grid.RowSpan="4" Grid.ColumnSpan="6"
x:Name="PointsCanvasControl"
Visibility="{Binding IsInBigMapUi, Converter={StaticResource BooleanToVisibilityConverter}}"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
PointClickCommand="{Binding PointClickCommand}"
PointRightClickCommand="{Binding PointRightClickCommand}"
PointHoverCommand="{Binding PointHoverCommand}" />
<Grid Grid.Row="0"
Grid.Column="0"
Grid.RowSpan="4"
Grid.ColumnSpan="6"
IsHitTestVisible="False"
Visibility="{Binding IsMapPointsLoading, Converter={StaticResource BooleanToVisibilityConverter}}">
<Border HorizontalAlignment="Center"
VerticalAlignment="Top"
Margin="0,16,0,0"
Padding="12,10"
Background="#CC1F232A"
BorderBrush="#26FFFFFF"
BorderThickness="1"
CornerRadius="12">
<StackPanel Orientation="Horizontal">
<ui:ProgressRing Width="18" Height="18" IsIndeterminate="True" Margin="0,0,10,0" />
<TextBlock Foreground="White"
FontSize="13"
Text="{Binding MapPointsLoadingText}" />
</StackPanel>
</Border>
</Grid>
<Popup AllowsTransparency="True"
IsOpen="{Binding PointInfoPopup.IsOpen}"
PlacementTarget="{Binding ElementName=PointsCanvasControl}"
Placement="Top"
PlacementRectangle="{Binding PointInfoPopup.PlacementRect}"
HorizontalOffset="-164"
VerticalOffset="-8"
StaysOpen="True">
<Border Width="360"
Background="#C81F232A"
BorderBrush="#26FFFFFF"
BorderThickness="1"
CornerRadius="12"
DataContext="{Binding PointInfoPopup}">
<Border.Effect>
<DropShadowEffect Opacity="0.7" BlurRadius="28" ShadowDepth="0" Color="#FF000000" />
</Border.Effect>
<Grid Margin="12">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
FontSize="14"
FontWeight="SemiBold"
Foreground="White"
Text="{Binding Title}"
TextTrimming="CharacterEllipsis" />
<ui:Button Grid.Column="1"
Width="28"
Height="28"
Padding="0"
Margin="8,-2,-2,0"
Background="Transparent"
BorderBrush="{x:Null}"
Command="{Binding CloseCommand}"
Content="✕" />
</Grid>
<StackPanel Grid.Row="1" Margin="0,10,0,0">
<StackPanel Orientation="Horizontal"
Height="16"
Visibility="{Binding IsTextLoading, Converter={StaticResource BooleanToVisibilityConverter}}">
<ui:ProgressRing Width="16" Height="16" IsIndeterminate="True" Margin="0,0,8,0" />
<TextBlock Foreground="#B3FFFFFF" Text="正在加载文本..." />
</StackPanel>
<TextBlock Margin="0,6,0,0"
Foreground="#B3FFFFFF"
TextWrapping="Wrap"
Visibility="{Binding TextError, Converter={StaticResource BooleanToVisibilityRevertConverter}}"
Text="{Binding TextError}" />
<ItemsControl Margin="0,8,0,0"
ItemsSource="{Binding UrlList}"
Visibility="{Binding HasUrlList, Converter={StaticResource BooleanToVisibilityConverter}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Margin="0,0,8,8"
Padding="10,4"
Background="#2FFFFFFF"
BorderBrush="#26FFFFFF"
BorderThickness="1"
Cursor="Hand"
ToolTip="{Binding Url}"
Command="{Binding DataContext.OpenUrlCommand, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
CommandParameter="{Binding Url}">
<Button.Template>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
CornerRadius="10"
Padding="{TemplateBinding Padding}">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Button.Template>
<TextBlock Foreground="White" FontSize="12" Text="{Binding DisplayText}" />
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Border Margin="0,10,0,0"
CornerRadius="8"
ClipToBounds="True"
Visibility="{Binding HasImage, Converter={StaticResource BooleanToVisibilityConverter}}">
<Grid>
<Image gif:AnimationBehavior.SourceStream="{Binding GifSourceStream}"
gif:AnimationBehavior.SourceUri="{Binding GifSourceUri}"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Stretch="Uniform">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsGifImage}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<Image Source="{Binding Image}"
HorizontalAlignment="Stretch"
VerticalAlignment="Top"
Stretch="Uniform">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsGifImage}" Value="True">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
<DataTrigger Binding="{Binding Image}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<StackPanel Orientation="Horizontal"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Visibility="{Binding IsImageLoading, Converter={StaticResource BooleanToVisibilityConverter}}">
<ui:ProgressRing Width="16" Height="16" IsIndeterminate="True" Margin="0,0,8,0" />
<TextBlock Foreground="#B3FFFFFF" Text="图片加载中..." />
</StackPanel>
<TextBlock HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="#B3FFFFFF"
TextWrapping="Wrap"
Visibility="{Binding ImageError, Converter={StaticResource BooleanToVisibilityRevertConverter}}"
Text="{Binding ImageError}" />
</Grid>
</Border>
<ScrollViewer Margin="0,8,0,0"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
MaxHeight="220">
<ScrollViewer.Style>
<Style TargetType="{x:Type ScrollViewer}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding IsTextLoading}" Value="False" />
<Condition Binding="{Binding TextError}" Value="" />
</MultiDataTrigger.Conditions>
<Setter Property="Visibility" Value="Visible" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</ScrollViewer.Style>
<TextBlock Foreground="#E6FFFFFF"
Text="{Binding Text}"
TextWrapping="Wrap" />
</ScrollViewer>
</StackPanel>
</Grid>
</Border>
</Popup>
<Grid x:Name="MapPointPickerRoot"
Grid.Row="0"
Grid.RowSpan="4"
Grid.Column="0"
Grid.ColumnSpan="6"
Panel.ZIndex="2001"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
Visibility="{Binding IsInBigMapUi, Converter={StaticResource BooleanToVisibilityConverter}}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="108*" />
<ColumnDefinition Width="1802*" />
<ColumnDefinition Width="10*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="10*" />
<RowDefinition Height="1038*" />
<RowDefinition Height="32*" />
</Grid.RowDefinitions>
<Grid Grid.Row="1" Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="58*" />
<ColumnDefinition Width="12*" />
<ColumnDefinition Width="640*" />
<ColumnDefinition Width="1092*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="328*" />
<RowDefinition Height="640*" />
<RowDefinition Height="12*" />
<RowDefinition Height="58*" />
</Grid.RowDefinitions>
<Viewbox x:Name="MapPointPickerToggleViewbox"
Grid.Row="3"
Grid.Column="0"
Stretch="Uniform"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch">
<Grid Width="58"
Height="58">
<Border BorderBrush="#77FDF5E4"
BorderThickness="6"
CornerRadius="28.5">
<Border.Effect>
<DropShadowEffect Opacity="0.25" BlurRadius="2" ShadowDepth="0" Color="#8C8C8C" />
</Border.Effect>
<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<Border Width="46"
Height="46"
Background="#ECE5D8"
Opacity="1"
CornerRadius="23">
<ui:Button Appearance="Transparent"
Background="Transparent"
Foreground="#3B4255"
BorderBrush="Transparent"
BorderThickness="0"
Padding="8,0,0,0"
FontSize="30"
Icon="{ui:SymbolIcon GlobeLocation24}"
Command="{Binding ToggleMapPointPickerCommand}" />
</Border>
</Grid>
</Border>
</Grid>
</Viewbox>
<Popup AllowsTransparency="True"
IsOpen="{Binding IsMapPointPickerOpen}"
PlacementTarget="{Binding ElementName=MapPointPickerToggleViewbox}"
Placement="Top"
HorizontalOffset="0"
VerticalOffset="{StaticResource MapPointPickerVerticalOffset}"
StaysOpen="True">
<Grid VerticalAlignment="Top">
<Grid.Height>
<MultiBinding Converter="{StaticResource OverlayRelativeOrAbsoluteConverter}">
<Binding Source="{StaticResource MapPointPickerHeightRatio}" />
<Binding Path="MaskWindowHeight" />
</MultiBinding>
</Grid.Height>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="540" />
<ColumnDefinition Width="12" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Border Grid.Column="0"
Width="540"
Background="#C81F232A"
BorderBrush="#26FFFFFF"
BorderThickness="1"
CornerRadius="12">
<Border.Effect>
<DropShadowEffect Opacity="0.7" BlurRadius="28" ShadowDepth="0" Color="#FF000000" />
</Border.Effect>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Margin="12,12,12,8">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ComboBox Grid.Column="0"
Height="32"
MinWidth="140"
Margin="0,0,12,0"
Padding="12,0,6,0"
VerticalContentAlignment="Center"
ItemsSource="{Binding MapPointApiProviderOptions}"
SelectedItem="{Binding SelectedMapPointApiProviderOption, Mode=TwoWay}"
DisplayMemberPath="DisplayName" />
<ui:TextBox x:Name="MapLabelSearchTextBox"
Grid.Column="1"
Height="32"
PlaceholderText="搜索当前区域下的标点分类"
Text="{Binding MapLabelSearchText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
PreviewMouseLeftButtonDown="MapLabelSearchTextBox_OnPreviewMouseLeftButtonDown" />
<StackPanel Grid.Column="2" Orientation="Horizontal" Margin="8,0,0,0">
<ui:Button
Width="32"
Height="32"
Background="#FF2B2F37"
Foreground="White"
Icon="{ui:SymbolIcon Dismiss24}"
Command="{Binding ToggleMapPointPickerCommand}" />
</StackPanel>
</Grid>
<Grid Grid.Row="1" Margin="12,0,12,12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="140" />
<ColumnDefinition Width="12" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border Grid.Column="0"
Background="#B2232831"
BorderBrush="#1FFFFFFF"
BorderThickness="1"
CornerRadius="10"
Padding="8">
<ui:ListView x:Name="MapLabelCategoriesListView"
ItemsSource="{Binding MapLabelCategories}"
SelectedItem="{Binding SelectedMapLabelCategory, Mode=TwoWay}"
SelectionMode="Single"
Background="Transparent"
BorderThickness="0"
ScrollViewer.VerticalScrollBarVisibility="Auto"
PreviewMouseLeftButtonDown="MapLabelCategoriesListView_OnPreviewMouseLeftButtonDown">
<ui:ListView.ItemTemplate>
<DataTemplate>
<Border Margin="0,1"
Padding="6,6"
Background="Transparent">
<TextBlock Foreground="White"
Text="{Binding Name}"
TextTrimming="CharacterEllipsis" />
</Border>
</DataTemplate>
</ui:ListView.ItemTemplate>
</ui:ListView>
</Border>
<Border Grid.Column="2"
Background="#B2232831"
BorderBrush="#1FFFFFFF"
BorderThickness="1"
CornerRadius="10"
Padding="10">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ui:TextBlock Grid.Row="0"
Margin="2,0,0,8"
Foreground="{ui:ThemeResource TextFillColorSecondaryBrush}"
Text="{Binding SelectedMapLabelCategory.Name, TargetNullValue=''}" />
<ScrollViewer Grid.Row="1"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled">
<ItemsControl ItemsSource="{Binding MapLabelItems}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Width="160"
Height="54"
Margin="0,0,8,8"
Background="#B22C323C"
BorderBrush="#403A424F"
BorderThickness="1"
Padding="8,0"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Center"
Command="{Binding DataContext.SelectMapLabelItemCommand, RelativeSource={RelativeSource AncestorType=Window}}"
CommandParameter="{Binding}">
<DockPanel HorizontalAlignment="Stretch"
VerticalAlignment="Center"
LastChildFill="True">
<Border DockPanel.Dock="Left"
Width="36"
Height="36"
CornerRadius="8"
Background="#80232831"
Margin="0,0,4,0">
<Image Width="28"
Height="28"
Stretch="Uniform"
Source="{Binding IconImage}" />
</Border>
<TextBlock DockPanel.Dock="Right"
Width="42"
VerticalAlignment="Center"
HorizontalAlignment="Right"
TextAlignment="Right"
Foreground="{ui:ThemeResource TextFillColorSecondaryBrush}"
Text="{Binding PointCount}" />
<TextBlock VerticalAlignment="Center"
Foreground="White"
HorizontalAlignment="Stretch"
TextAlignment="Left"
Text="{Binding Name}"
TextTrimming="CharacterEllipsis" />
</DockPanel>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ScrollViewer>
<Grid Grid.Row="1"
Visibility="{Binding IsMapLabelTreeLoading, Converter={StaticResource BooleanToVisibilityConverter}}"
Background="#AA232831">
<ui:TextBlock HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="White"
FontTypography="BodyStrong"
Text="加载中..." />
</Grid>
</Grid>
</Border>
</Grid>
</Grid>
</Border>
<ItemsControl Grid.Column="2"
Width="64"
HorizontalAlignment="Left"
VerticalAlignment="Stretch"
ItemsSource="{Binding SelectedMapLabelItems}">
<ItemsControl.Style>
<Style TargetType="ItemsControl">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<Trigger Property="HasItems" Value="True">
<Setter Property="Visibility" Value="Visible" />
</Trigger>
</Style.Triggers>
</Style>
</ItemsControl.Style>
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<Border Background="#C81F232A"
BorderBrush="#26FFFFFF"
BorderThickness="1"
CornerRadius="12"
Padding="8">
<Border.Effect>
<DropShadowEffect Opacity="0.7" BlurRadius="28" ShadowDepth="0" Color="#FF000000" />
</Border.Effect>
<DockPanel LastChildFill="True">
<Button DockPanel.Dock="Top"
Width="40"
Height="40"
Margin="0,0,0,8"
Background="Transparent"
BorderThickness="0"
Padding="0"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
ToolTip="重置选择"
Command="{Binding ResetSelectedMapLabelSelectionCommand}">
<Border Width="40"
Height="40"
CornerRadius="20"
Background="#C82C323C"
BorderBrush="#403A424F"
BorderThickness="1">
<ui:SymbolIcon Width="22"
Height="22"
Foreground="White"
Symbol="Broom24" />
</Border>
</Button>
<ScrollViewer VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Disabled"
Padding="0"
Margin="0">
<ItemsPresenter />
</ScrollViewer>
</DockPanel>
</Border>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Width="40"
Height="40"
Margin="0,0,0,8"
Background="Transparent"
BorderThickness="0"
Padding="0"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center"
Command="{Binding DataContext.SelectMapLabelItemCommand, RelativeSource={RelativeSource AncestorType=Window}}"
CommandParameter="{Binding}">
<Border Width="40"
Height="40"
CornerRadius="20"
Background="#C82C323C"
BorderBrush="#403A424F"
BorderThickness="1">
<Image Width="30"
Height="30"
Stretch="Uniform"
Source="{Binding IconImage}" />
</Border>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Popup>
</Grid>
</Grid>
</Grid>
</Grid>
</AdornerDecorator>
</Window>