HashCalculator.GUI/MainWindow.xaml
2020-04-03 04:48:57 +02:00

282 lines
13 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"
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
Text="{Binding StatusText}"
Margin="5,0,0,0"
VerticalAlignment="Center"
/>
</Grid>
<DockPanel
DockPanel.Dock="Top"
Height="25"
Margin="0,0,0,5"
>
<Grid
DockPanel.Dock="Right"
Width="190"
Visibility="{Binding IsXml,
Converter={StaticResource BooleanToVisibilityConverter}}"
>
<Button
Content="{Binding LoadCsfText}"
Command="{Binding LoadCsf}"
CommandParameter="{Binding ElementName=Self}"
Width="92"
HorizontalAlignment="Left"
/>
<Button
Content="取消加载"
Command="{Binding CancelXml}"
Width="92"
HorizontalAlignment="Right"
Visibility="{Binding IsLoadingXml,
Converter={StaticResource BooleanToVisibilityConverter}}"
/>
</Grid>
<CheckBox
DockPanel.Dock="Right"
Content="只显示 GameObject"
IsChecked="{Binding GameObjectOnly}"
Command="{Binding FilterDisplayEntries}"
Width="155"
VerticalAlignment="Center"
/>
<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.Columns>
<DataGridTextColumn
Header="类型/素材名称"
Binding="{Binding NameString}"
/>
<DataGridTextColumn
Header="哈希InstanceId"
Binding="{Binding InstanceIdString}"
FontFamily="Courier New"
/>
<DataGridTextColumn
Header="名称"
Binding="{Binding LocalizedNames}"
Visibility="{Binding Source={x:Reference Name=ReferenceProvider},
Path=DataContext.IsXml,
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
Text="Tracer 输出:"
Margin="0,5,0,0"
Visibility="{Binding TraceText,
Converter={StaticResource NotNullToVisibilityConverter}}"
/>
<TextBox
Text="{Binding TraceText, Mode=OneWay}"
Visibility="{Binding TraceText,
Converter={StaticResource NotNullToVisibilityConverter}}"
TextWrapping="Wrap"
IsReadOnly="True"
BorderBrush="Transparent"
/>
<StackPanel
FlowDirection="RightToLeft"
Orientation="Horizontal"
Height="25"
Visibility="{Binding TraceText,
Converter={StaticResource NotNullToVisibilityConverter}}"
>
<Button
Content="清除输出"
Command="{Binding ClearTraceText}"
Width="92"
Grid.Row="1"
/>
<TextBlock
VerticalAlignment="Center"
Margin="10,0"
Visibility="{Binding SuggestClearFilter, Converter={StaticResource BooleanToVisibilityConverter}}"
>
假如觉得有点卡的话,可以试试点击右边的这个按钮
</TextBlock>
</StackPanel>
</StackPanel>
</ScrollViewer>
</Grid>
</Window>