mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-05-21 09:45:48 +08:00
1005 lines
63 KiB
XML
1005 lines
63 KiB
XML
<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.00,DPI缩放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>
|