HashCalculator.GUI/MainWindow.xaml
2022-01-25 19:05:37 +01:00

350 lines
16 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="HashCalculator.GUI.MainWindow"
x:Name="Self"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:l="clr-namespace:HashCalculator.GUI"
xmlns:c="clr-namespace:HashCalculator.GUI.Converters"
xmlns:sys="clr-namespace:System;assembly=System.Runtime"
mc:Ignorable="d"
Title="SAGE FastHash 哈希计算器"
Height="600"
Width="600"
Style="{StaticResource CommonStyle}"
Initialized="OnInitialized"
>
<Window.DataContext>
<l:ViewModel />
</Window.DataContext>
<Grid Margin="10,20,10,10">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="150" />
</Grid.RowDefinitions>
<DockPanel Grid.Row="0">
<Grid
DockPanel.Dock="Top"
Height="25"
>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="92"/>
</Grid.ColumnDefinitions>
<l:InputBar
HintText="输入文本,或 big/manifest/xml 文件路径"
Text="{Binding MainInput.Text}"
Collection="{Binding MainInput.Items}"
SelectedItem="{Binding MainInput.SelectedItem}"
SelectedIndex="{Binding MainInput.SelectedIndex}"
Grid.Column="0"
Margin="0,0,10,0"
/>
<Button
Content="浏览文件"
Command="{Binding MainInput.BrowseCommand}"
CommandParameter="{Binding ElementName=Self}"
Visibility="{Binding MainInput.SelectedItem,
Converter={StaticResource InvalidInputEntryToVisibilityConverter}}"
Grid.Column="1"
Margin="0"
/>
<Button
Content="确认"
Command="{Binding MainInput.SelectCommand}"
CommandParameter="{Binding}"
Visibility="{Binding MainInput.SelectedItem,
Converter={StaticResource ValidInputEntryToVisibilityConverter}}"
Grid.Column="1"
Margin="0"
Foreground="#20FF30"
BorderBrush="#20FF30"
/>
</Grid>
<Grid
DockPanel.Dock="Top"
Height="25"
Margin="0,10,0,0"
Visibility="{Binding BigEntryInput.AllManifests,
Converter={StaticResource NotNullToVisibilityConverter}}"
>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="92" />
</Grid.ColumnDefinitions>
<l:InputBar
HintText="输入 big 文件里包含的 manifest 文件的路径"
Text="{Binding BigEntryInput.Text}"
Collection="{Binding BigEntryInput.Items}"
SelectedItem="{Binding BigEntryInput.SelectedItem}"
SelectedIndex="{Binding BigEntryInput.SelectedIndex}"
Grid.Column="0"
Margin="0,0,10,0"
/>
<Button
Content="确认"
Command="{Binding BigEntryInput.SelectCommand}"
CommandParameter="{Binding}"
Grid.Column="1"
Margin="0"
>
<Button.Style>
<Style
BasedOn="{StaticResource ButtonStyle}"
TargetType="Button"
>
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Value="False">
<Condition.Binding>
<MultiBinding Converter="{StaticResource MultiValueEqualityConverter}">
<Binding Path="BigEntryInput.LastProcessedManifest"></Binding>
<Binding Path="BigEntryInput.SelectedItem"></Binding>
</MultiBinding>
</Condition.Binding>
</Condition>
<Condition
Binding="{Binding RelativeSource={RelativeSource Mode=Self},
Path=IsEnabled}"
Value="True"
/>
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="#20FF30" />
<Setter Property="BorderBrush" Value="#20FF30" />
</MultiDataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</Grid>
<Grid
DockPanel.Dock="Top"
Height="25"
Margin="0,5,0,0"
>
<TextBlock
Margin="5,0,0,0"
VerticalAlignment="Center"
>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter
Property="Text"
Value="{Binding Path=StatusText}"
/>
<Style.Triggers>
<DataTrigger
Binding="{Binding Path=StatusText}"
Value="{x:Null}"
>
<Setter
Property="Text"
Value="{Binding ElementName=Self, Path=SuggestionString}"
/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
<DockPanel
DockPanel.Dock="Top"
Height="25"
Margin="0,0,0,5"
>
<StackPanel
DockPanel.Dock="Right"
Orientation="Horizontal"
d:Visibility="Visible"
Visibility="{Binding IsXml,
Converter={StaticResource BooleanToVisibilityConverter}}"
>
<Button
Content="取消加载 XML"
Command="{Binding CancelXml}"
Padding="8,0"
Margin="0,0,8,0"
Visibility="{Binding IsLoadingXml,
Converter={StaticResource BooleanToVisibilityConverter}}"
/>
<Button
Content="{Binding LoadCsfText}"
Command="{Binding LoadCsf}"
CommandParameter="{Binding ElementName=Self}"
Padding="16,0"
Visibility="{Binding IsXsd,
Converter={StaticResource FalseToVisibilityConverter}}"
/>
</StackPanel>
<StackPanel
DockPanel.Dock="Right"
Orientation="Horizontal"
Visibility="{Binding IsXsd,
Converter={StaticResource FalseToVisibilityConverter}}"
>
<CheckBox
Content="只显示 GameObject"
IsChecked="{Binding GameObjectOnly}"
Command="{Binding FilterDisplayEntries}"
Padding="4,0"
Margin="8,0"
VerticalAlignment="Center"
/>
<CheckBox
Content="搜索类型 ID"
IsChecked="{Binding ConsiderTypeId}"
Command="{Binding FilterDisplayEntries}"
Padding="4,0"
Margin="8,0"
VerticalAlignment="Center"
/>
</StackPanel>
<TextBlock
Text="{Binding DisplayEntries.Count, StringFormat=列表里显示了{0}个素材}"
Margin="5,0,0,0"
Width="160"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Visibility="{Binding DisplayEntries.Count,
Converter={StaticResource NonZeroToVisibilityConverter}}"
/>
</DockPanel>
<Grid
DockPanel.Dock="Top"
Height="25"
>
<TextBox
Text="{Binding Filter, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
VerticalContentAlignment="Center"
/>
<TextBlock
Text="可以按照素材名称或 Instance ID 来查找素材,加载 CSF 之后还可以按照单位名称来查找"
Foreground="#B0B0B0"
Padding="5,0"
VerticalAlignment="Center"
Visibility="{Binding Filter,
Converter={StaticResource NullToVisibilityConverter}}"
IsHitTestVisible="False"
/>
</Grid>
<FrameworkElement x:Name="ReferenceProvider" Visibility="Collapsed"/>
<DataGrid
x:Name="DataGrid"
ItemsSource="{Binding DisplayEntries}"
IsReadOnly="True"
AutoGenerateColumns="False"
ScrollViewer.CanContentScroll="True"
VerticalScrollBarVisibility="Auto"
EnableRowVirtualization="True"
VirtualizingPanel.VirtualizationMode="Recycling"
>
<DataGrid.Resources>
<c:MultiValueAggregateConverter x:Key="IsXmlNotXsd">
<c:MultiValueAggregateConverter.Converter>
<c:MultiBooleanConjunctionConverter />
</c:MultiValueAggregateConverter.Converter>
<c:MultiValueAggregateConverter.PostProcess>
<BooleanToVisibilityConverter />
</c:MultiValueAggregateConverter.PostProcess>
<x:Null />
<c:BooleanInvertConverter />
</c:MultiValueAggregateConverter>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn
Header="类型/素材名称"
Binding="{Binding NameString}"
/>
<DataGridTextColumn
Header="哈希InstanceId"
Binding="{Binding InstanceIdString}"
FontFamily="Courier New"
Visibility="{Binding Source={x:Reference Name=ReferenceProvider},
Path=DataContext.IsXsd,
Converter={StaticResource FalseToVisibilityConverter}}"
/>
<DataGridTextColumn
Header="名称"
Binding="{Binding LocalizedNames}"
>
<DataGridTextColumn.Visibility>
<MultiBinding Converter="{StaticResource IsXmlNotXsd}">
<Binding
Source="{x:Reference Name=ReferenceProvider}"
Path="DataContext.IsXml"
/>
<Binding
Source="{x:Reference Name=ReferenceProvider}"
Path="DataContext.IsXsd"
/>
</MultiBinding>
</DataGridTextColumn.Visibility>
</DataGridTextColumn>
<DataGridTextColumn
Header="类型 ID"
Binding="{Binding TypeIdString}"
FontFamily="Courier New"
Visibility="{Binding Source={x:Reference Name=ReferenceProvider},
Path=DataContext.ConsiderTypeId,
Converter={StaticResource BooleanToVisibilityConverter}}"
/>
</DataGrid.Columns>
</DataGrid>
</DockPanel>
<ScrollViewer
Grid.Row="1"
Margin="0,10,0,0"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Auto"
ScrollChanged="OnButtomScrollViewerScrollChanged"
>
<StackPanel>
<TextBlock TextWrapping="Wrap">
本工具基于 <l:ShellLink NavigateUri="https://github.com/Qibbi">Qibbi</l:ShellLink> 提供的 TechnologyAssembler 制作<LineBreak />
使用了 <l:ShellLink NavigateUri="https://github.com/bgrainger">Bradley Grainger</l:ShellLink>
<l:ShellLink NavigateUri="https://github.com/bgrainger/IndexRange">IndexRange</l:ShellLink>
从而能在 .NET Standard 2.0 上使用 C# 8.0 的末尾索引操作符<LineBreak />
此外还使用了 <l:ShellLink NavigateUri="http://mvpxml.codeplex.com/">Mvp.Xml</l:ShellLink> 来解析 XML 文件<LineBreak />
<LineBreak />
假如对本工具有任何疑问或者建议的话,可以来到<l:ShellLink NavigateUri="https://tieba.baidu.com/ra3">红警3吧</l:ShellLink>发帖寻找岚依(
</TextBlock>
<TextBlock
x:Name="LogPrefix"
Text="Tracer 输出:"
Margin="0,5,0,0"
Visibility="Collapsed"
/>
<TextBox
x:Name="LogText"
TextWrapping="Wrap"
IsReadOnly="True"
BorderBrush="Transparent"
/>
<StackPanel
x:Name="ClearLogs"
FlowDirection="RightToLeft"
Orientation="Horizontal"
Height="25"
Visibility="Collapsed"
>
<Button
Content="清除输出"
Command="{Binding ClearTraceText}"
Width="92"
Grid.Row="1"
/>
<TextBlock
VerticalAlignment="Center"
Margin="10,0"
>
假如觉得有点卡的话,可以试试点击右边的这个按钮
</TextBlock>
</StackPanel>
</StackPanel>
</ScrollViewer>
</Grid>
</Window>