350 lines
16 KiB
XML
350 lines
16 KiB
XML
<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>
|