4 Star 56 Fork 9

hrpzcf/HashCalculator

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
MainWindow.xaml 76.27 KB
一键复制 编辑 原始数据 按行查看 历史
hrpzcf 提交于 2025-02-22 12:58 +08:00 . 【文件大小】列标题改为右对齐
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178
<Window
x:Class="HashCalculator.MainWindow"
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:hc="https://handyorg.github.io/handycontrol"
xmlns:local="clr-namespace:HashCalculator"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="{x:Static local:Info.Title}"
Width="{Binding Source={x:Static local:Settings.Current}, Path=MainWndWidth, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Height="{Binding Source={x:Static local:Settings.Current}, Path=MainWndHeight, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
d:DataContext="{d:DesignInstance Type=local:MainWndViewModel}"
d:Height="300"
d:Width="1100"
Icon="/Images/icon.ico"
SnapsToDevicePixels="True"
Topmost="{Binding Source={x:Static local:Settings.Current}, Path=MainWndTopmost}"
UseLayoutRounding="True"
WindowState="{Binding Source={x:Static local:Settings.Current}, Path=MainWindowState, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
mc:Ignorable="d">
<Window.Top>
<MultiBinding Converter="{StaticResource MainWndTopCvt}" Mode="TwoWay">
<Binding
Mode="TwoWay"
Path="MainWindowTop"
Source="{x:Static local:Settings.Current}"
UpdateSourceTrigger="PropertyChanged" />
<Binding
Mode="OneWayToSource"
Path="FilterAndCmderWndTop"
Source="{x:Static local:Settings.Current}"
UpdateSourceTrigger="PropertyChanged" />
</MultiBinding>
</Window.Top>
<Window.Left>
<MultiBinding Converter="{StaticResource MainWndLeftCvt}" Mode="TwoWay">
<Binding
Mode="TwoWay"
Path="MainWindowLeft"
Source="{x:Static local:Settings.Current}"
UpdateSourceTrigger="PropertyChanged" />
<Binding
Mode="OneWayToSource"
Path="FilterAndCmderWndLeft"
Source="{x:Static local:Settings.Current}"
UpdateSourceTrigger="PropertyChanged" />
</MultiBinding>
</Window.Left>
<Grid Margin="8,0,8,8">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ScrollViewer
Grid.Row="0"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Disabled"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWindowButtons, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Grid Margin="0,4,0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel
Grid.Column="0"
Margin="0,0,16,0"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowOpenSelectAlgoWndButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Button
Command="{Binding OpenSelectAlgoWndCmd}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="此设置影响变更后才开始计算的行,包括通过【新增计算】/【计算未完成项】/【重新计算】按钮发起的任务">
<Image
Width="32"
Height="32"
Source="{StaticResource algorithmDrawingImage}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="默认算法"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel Grid.Column="1" Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowSelectedOutputTypeButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<StackPanel Orientation="Horizontal">
<ComboBox
Width="110"
Margin="0,2,0,0"
VerticalAlignment="Center"
DisplayMemberPath="Display"
ItemsSource="{Binding Path=(local:SettingsViewModel.AvailableOutputTypesLong)}"
SelectedValue="{Binding Source={x:Static local:Settings.Current}, Path=SelectedOutputType}"
SelectedValuePath="ItemValue"
Style="{StaticResource ComboBoxStyle1}"
ToolTip="此设置影响变更后才开始计算的行和【刷新输出】按钮、【导出结果】按钮的行为,其中十六进制大/小写是常用的输出方式" />
<Button
Margin="2,0,0,0"
Command="{Binding RefreshAllOutputTypeCmd}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="将表格内所有行的哈希值输出方式刷新为【默认输出方式】下拉列表所选择的输出方式">
<Image
Width="32"
Height="32"
Source="{StaticResource refresh_outputDrawingImage}" />
</Button>
</StackPanel>
<TextBlock
Margin="0,2"
HorizontalAlignment="Left"
Style="{StaticResource ImgButtonTextStyle1}"
Text="默认输出方式"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel
Grid.Column="3"
Margin="16,0,0,0"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowOpenCommandPanelButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Button
Command="{Binding OpenCommandPanelCmd}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="打开【筛选与操作】窗口以进行筛选/对筛选结果进行操作,或关闭已打开的【筛选与操作】窗口">
<Image
Width="32"
Height="32"
Source="{StaticResource filterDrawingImage}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="筛选与操作"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel
Grid.Column="4"
Margin="8,0,0,0"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowSelectFilesToHashButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Button
Command="{Binding SelectFilesToHashCmd}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="打开【选择文件】对话框以选择/多选文件进行计算,也可以将文件和文件夹直接拖放到表格中">
<Image
Width="32"
Height="32"
Source="{StaticResource select_fileDrawingImage}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="选择文件"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel
Grid.Column="5"
Margin="8,0,0,0"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowSelectFoldersToHashButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Button
Command="{Binding SelectFoldersToHashCmd}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="打开【选择文件夹】对话框以选择/多选文件夹进行计算,也可以将文件和文件夹直接拖放到表格中">
<Image
Width="32"
Height="32"
Source="{StaticResource select_folderDrawingImage}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="选择目录"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel
Grid.Column="6"
Margin="8,0,0,0"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowStopEnumeratingPackageButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Button
Command="{Binding StopEnumeratingPackageCmd}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="如果程序正持续搜索文件并向表格添加新文件,则立即停止搜索文件,但不停止现有的哈希值计算任务">
<Image
Width="32"
Height="32"
Source="{StaticResource stop_searchingDrawingImage}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="停止搜索"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel
Grid.Column="7"
Margin="8,0,0,0"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowExportHashResultsButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Button
Command="{Binding ExportHashResultsCmd}"
IsEnabled="{Binding State, Converter={StaticResource MainModelStateToBooleanCvt}}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="将表格中所有行的哈希值计算结果导出为文本文件&#10;导出的内容使用的输出方式受到【默认输出方式】的控制而不受各行自己的【输出方式】的控制&#10;只有计算成功且【导出】列被勾选的行的结果会被导出">
<Image
Width="32"
Height="32"
Source="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Parent.IsEnabled, Converter={StaticResource BtnExportEnabledImgSrcCvt}}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="导出结果"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel
Grid.Column="8"
Margin="8,0,0,0"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowCopyAndRestartModelsButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Button
Command="{Binding CopyAndRestartModelsCmd}"
IsEnabled="{Binding State, Converter={StaticResource MainModelStateToBooleanCvt}}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="复制表格中所有的行到新行并使用【默认算法】中所选的算法重新计算新行的哈希值">
<Image
Width="32"
Height="32"
Source="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Parent.IsEnabled, Converter={StaticResource BtnNewLineEnabledImgSrcCvt}}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="新行重算"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel
Grid.Column="9"
Margin="8,0,0,0"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowRefreshOriginalModelsButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Button
Command="{Binding RefreshOriginalModelsCmd}"
IsEnabled="{Binding State, Converter={StaticResource MainModelStateToBooleanCvt}}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="使用【默认算法】中所选的算法重新计算表格中那些没有计算成功的行的哈希值">
<Image
Width="32"
Height="32"
Source="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Parent.IsEnabled, Converter={StaticResource BtnRefreshEnabledImgSrcCvt}}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="计算缺值项"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel
Grid.Column="10"
Margin="8,0,0,0"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowForceRefreshOriginalModelsButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Button
Command="{Binding ForceRefreshOriginalModelsCmd}"
IsEnabled="{Binding State, Converter={StaticResource MainModelStateToBooleanCvt}}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="使用【默认算法】中所选的算法重新计算表格中的所有行的哈希值">
<Image
Width="32"
Height="32"
Source="{Binding RelativeSource={RelativeSource Mode=Self}, Path=Parent.IsEnabled, Converter={StaticResource BtnForceRefreshEnabledImgSrcCvt}}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="重新计算"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel
Grid.Column="11"
Margin="8,0,0,0"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowClearAllTableLinesButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Button
Command="{Binding ClearAllTableLinesCmd}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="停止表格中的所有正在运行的任务并清空表格所有内容">
<Image
Width="32"
Height="32"
Source="{StaticResource clear_tableDrawingImage}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="清空表格"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel
Grid.Column="12"
Margin="8,0,0,0"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowContinueDisplayedModelsButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Button
Command="{Binding ContinueDisplayedModelsCmd}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="开始所有未开始或已暂停的任务,但不会重新开始已停止的任务">
<Image
Width="32"
Height="32"
Source="{StaticResource continue_tasksDrawingImage}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="全部开始"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel
Grid.Column="13"
Margin="8,0,0,0"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowPauseDisplayedModelsButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Button
Command="{Binding PauseDisplayedModelsCmd}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="暂停所有正在运行的计算任务 (计算大量小文件时可能会暂停不成功,需多次点击)">
<Image
Width="32"
Height="32"
Source="{StaticResource pause_tasksDrawingImage}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="全部暂停"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel
Grid.Column="14"
Margin="8,0,0,0"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowCancelDisplayedModelsButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Button
Command="{Binding CancelDisplayedModelsCmd}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="取消或停止所有未开始、排队中、运行中和已暂停的计算任务">
<Image
Width="32"
Height="32"
Source="{StaticResource cancel_tasksDrawingImage}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="全部取消"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel
Grid.Column="15"
Margin="8,0,0,0"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowMainWindowTopmostButton, Converter={StaticResource FalseToVisibilityCollapsedCvt}}">
<Button
Command="{Binding MainWindowTopmostCmd}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="点击时把主窗口状态切换为【置顶】或【非置顶】,按钮为灰色代表主窗口非置顶,否则是已置顶">
<Image
Width="32"
Height="32"
Source="{Binding Source={x:Static local:Settings.Current}, Path=MainWndTopmost, Converter={StaticResource BtnTopmostEnabledImgSrcCvt}}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="置顶窗口"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
<StackPanel Grid.Column="16" Margin="8,0,0,0">
<Button
Command="{Binding OpenSettingsWindowCmd}"
Style="{StaticResource ImageButtonStyle2}"
ToolTip="打开软件的设置窗口">
<Image
Width="32"
Height="32"
Source="{StaticResource settingsDrawingImage}" />
</Button>
<TextBlock
Margin="0,2"
HorizontalAlignment="Center"
Style="{StaticResource ImgButtonTextStyle1}"
Text="软件设置"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWndButtonText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</StackPanel>
</Grid>
</ScrollViewer>
<DataGrid
x:Name="MainWindowDataGrid"
Grid.Row="1"
Margin="0,4,0,0"
AllowDrop="True"
AutoGenerateColumns="False"
CanUserReorderColumns="True"
CellStyle="{StaticResource DataGridCellStyleNormal}"
Drop="DataGridHashingFilesDrop"
Grid.IsSharedSizeScope="True"
HeadersVisibility="Column"
IsReadOnly="True"
ItemsSource="{Binding Source={x:Static local:MainWndViewModel.HashViewModelsViewSrc}, IsAsync=True}"
PreviewKeyDown="DataGridHashingFilesPrevKeyDown"
RowStyle="{StaticResource MainDataGridRowStyle}"
ScrollViewer.CanContentScroll="True"
SelectedItem="{Binding SelectedHashVieModel}"
SelectionMode="Extended"
VirtualizingPanel.IsContainerVirtualizable="True"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.IsVirtualizingWhenGrouping="True"
VirtualizingPanel.VirtualizationMode="Recycling">
<local:ExecTargetAttach.Monitoring>
<MultiBinding Converter="{StaticResource StateAndSelectionWayToMonitoring}" Mode="OneWay">
<Binding Mode="OneWay" Path="State" />
<Binding
Mode="OneWay"
Path="IsMainRowSelectedByCheckBox"
Source="{x:Static local:Settings.Current}" />
</MultiBinding>
</local:ExecTargetAttach.Monitoring>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem
Command="{Binding OpenModelsFilePathCmd}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems}"
Header="打开文件" />
<MenuItem
Command="{Binding OpenFolderSelectItemsCmd}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems}"
Header="打开位置" />
<Separator />
<MenuItem Header="任务控制" ItemsSource="{Binding CtrlHashViewModelTaskCmds}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Display}" />
<Setter Property="Command" Value="{Binding ItemValue}" />
<Setter Property="CommandParameter" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
<MenuItem Header="切换所选行当前算法" ItemsSource="{Binding SwitchDisplayedAlgoCmds}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Display}" />
<Setter Property="Command" Value="{Binding ItemValue}" />
<Setter Property="CommandParameter">
<Setter.Value>
<MultiBinding Converter="{StaticResource CloneParameterArrayCvt}">
<Binding Path="Param" />
<Binding Path="PlacementTarget.SelectedItems" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
<MenuItem Header="切换所选行导出状态" ItemsSource="{Binding SwitchAlgoExportStateCmds}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Display}" />
<Setter Property="Command" Value="{Binding ItemValue}" />
<Setter Property="CommandParameter" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
<Separator />
<MenuItem
Command="{Binding CopyFilesNameCmd}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems}"
Header="复制文件名" />
<MenuItem
Command="{Binding CopyFilesFullPathCmd}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems}"
Header="复制文件的完整路径" />
<MenuItem
Header="按模板复制所选行当前结果"
IsEnabled="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems, Converter={StaticResource CopyModelsHashMenuEnabledCvt}}"
ItemsSource="{Binding CopyModelsHashMenuCmds}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Display}" />
<Setter Property="Command" Value="{Binding ItemValue}" />
<Setter Property="CommandParameter" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
<MenuItem
Header="按模板复制所选行所有结果"
IsEnabled="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems, Converter={StaticResource CopyModelsHashMenuEnabledCvt}}"
ItemsSource="{Binding CopyModelsAllHashesMenuCmds}">
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Display}" />
<Setter Property="Command" Value="{Binding ItemValue}" />
<Setter Property="CommandParameter" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
<MenuItem
Command="{Binding CopyModelsCurHashWithNoFormatCmd}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems}"
Header="复制所选行当前哈希值"
IsEnabled="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems, Converter={StaticResource CopyModelsHashMenuEnabledCvt}}" />
<MenuItem
Command="{Binding CopyModelsAllHashWithNoFormatCmd}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems}"
Header="复制所选行所有哈希值"
IsEnabled="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems, Converter={StaticResource CopyModelsHashMenuEnabledCvt}}" />
<Separator />
<MenuItem
Command="{Binding DeleteSelectedModelsFileCmd}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems}"
Header="删除文件" />
<MenuItem
Command="{Binding RemoveSelectedModelsCmd}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems}"
Header="移除所选行" />
<Separator />
<MenuItem
Command="{Binding OpenFilesPropertyCmd}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}, AncestorLevel=1}, Path=PlacementTarget.SelectedItems}"
Header="文件属性" />
<Separator Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWindowButtons, Converter={StaticResource TrueToVisibilityCollapsedCvt}}" />
<MenuItem
Command="{Binding DisplayMainWindowButtonsCmd}"
Header="显示工具按钮"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=DisplayMainWindowButtons, Converter={StaticResource TrueToVisibilityCollapsedCvt}}" />
</ContextMenu>
</DataGrid.ContextMenu>
<DataGrid.Columns>
<DataGridTemplateColumn
CanUserSort="True"
Header="序号"
SortMemberPath="SerialNumber"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=NoSerialNumColumn, Converter={StaticResource TrueToVisibilityHiddenCvt}, Mode=OneWay}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Background="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Background}">
<TextBlock
HorizontalAlignment="Left"
VerticalAlignment="Center"
Text="{Binding SerialNumber}" />
<Border.InputBindings>
<MouseBinding
Command="{Binding TableColumnDoubleClickCmd}"
CommandParameter="{Binding Source={x:Static local:Settings.Current}, Path=SerialColumnLeftDoubleClick}"
MouseAction="LeftDoubleClick" />
</Border.InputBindings>
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
MinWidth="100"
CanUserSort="True"
Header="文件名"
SortMemberPath="FileName">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="fdGroup" />
<ColumnDefinition Width="Auto" SharedSizeGroup="fileIcon" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Border
Grid.Row="0"
Grid.Column="0"
Width="7"
Margin="0,0,2,0"
BorderBrush="White"
BorderThickness="1"
Visibility="{Binding FdGroupId, Converter={StaticResource CmpColorToVisibilityCvt}}">
<Border.Background>
<MultiBinding Converter="{StaticResource CmpColorOrBrushToColorBrushCvt}">
<Binding Path="FdGroupId" />
<Binding Path="Background" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}" />
</MultiBinding>
</Border.Background>
</Border>
<Image
Grid.Row="0"
Grid.Column="1"
Margin="0,0,4,0"
VerticalAlignment="Center"
Source="{Binding FileIcon}"
Stretch="None"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowFileIcon, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
<Border
Grid.Row="0"
Grid.Column="2"
Background="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Background}">
<Border.InputBindings>
<MouseBinding
Command="{Binding TableColumnDoubleClickCmd}"
CommandParameter="{Binding Source={x:Static local:Settings.Current}, Path=FileNameColumnLeftDoubleClick}"
MouseAction="LeftDoubleClick" />
</Border.InputBindings>
<TextBlock
HorizontalAlignment="Left"
VerticalAlignment="Center"
Text="{Binding FileName}"
TextTrimming="CharacterEllipsis"
ToolTip="{Binding Information}">
<TextBlock.Foreground>
<MultiBinding Converter="{StaticResource InvalidFileNameForegroundCvt}">
<Binding Path="InvalidFileName" />
<Binding Path="Foreground" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}" />
</MultiBinding>
</TextBlock.Foreground>
</TextBlock>
</Border>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
MinWidth="100"
CanUserSort="True"
Header="完整路径"
SortMemberPath="Information"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=NoFullPathColumn, Converter={StaticResource TrueToVisibilityHiddenCvt}, Mode=OneWay}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Background="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Background}">
<Border.InputBindings>
<MouseBinding
Command="{Binding TableColumnDoubleClickCmd}"
CommandParameter="{Binding Source={x:Static local:Settings.Current}, Path=FullPathColumnLeftDoubleClick}"
MouseAction="LeftDoubleClick" />
</Border.InputBindings>
<TextBlock
HorizontalAlignment="Left"
VerticalAlignment="Center"
Text="{Binding Information}"
TextTrimming="CharacterEllipsis"
ToolTip="{Binding Information}" />
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
CanUserSort="True"
Header="文件大小"
SortMemberPath="FileLength"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=NoFileSizeColumn, Converter={StaticResource TrueToVisibilityHiddenCvt}, Mode=OneWay}">
<DataGridTemplateColumn.HeaderStyle>
<Style BasedOn="{StaticResource DataGridColumnHeaderStyle}" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Right" />
</Style>
</DataGridTemplateColumn.HeaderStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Background="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Background}">
<Border.InputBindings>
<MouseBinding
Command="{Binding TableColumnDoubleClickCmd}"
CommandParameter="{Binding Source={x:Static local:Settings.Current}, Path=FileSizeColumnLeftDoubleClick}"
MouseAction="LeftDoubleClick" />
</Border.InputBindings>
<TextBlock
HorizontalAlignment="Right"
VerticalAlignment="Center"
Text="{Binding FileLength, Converter={StaticResource BytesToIntuitiveFileSizeCvt}}">
<TextBlock.ToolTip>
<ToolTip Content="{Binding FileLength, Mode=OneWay}" ContentStringFormat="{}{0} 字节" />
</TextBlock.ToolTip>
</TextBlock>
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
CanUserSort="True"
Header="算法"
SortMemberPath="CurrentInOutModel.AlgoType">
<DataGridTemplateColumn.HeaderStyle>
<Style BasedOn="{StaticResource DataGridColumnHeaderStyle}" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGridTemplateColumn.HeaderStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
Margin="2"
VerticalAlignment="Center"
DisplayMemberPath="AlgoName"
ItemsSource="{Binding AlgoInOutModels}"
SelectedItem="{Binding CurrentInOutModel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Style="{StaticResource ComboBoxStyle2}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
CanUserSort="True"
Header="操作目标"
SortMemberPath="IsExecutionTarget"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=IsMainRowSelectedByCheckBox, Converter={StaticResource TrueToVisibilityVisibleCvt}, Mode=OneWay}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock
Grid.Column="1"
Margin="1,0"
Padding="0,4">
<TextBlock.Background>
<MultiBinding Converter="{StaticResource MultiCmpColorToColorBrushCvt}">
<Binding Path="GroupId" />
<Binding Path="FdGroupId" />
</MultiBinding>
</TextBlock.Background>
</TextBlock>
<CheckBox
Grid.ColumnSpan="2"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Foreground="#FFFFFFFF"
IsChecked="{Binding IsExecutionTarget, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
MinWidth="210"
CanUserSort="True"
Header="哈希值"
SortMemberPath="CurrentHashString">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Border
Grid.Column="0"
Width="7"
Margin="0,0,4,0"
BorderBrush="White"
BorderThickness="1"
Visibility="{Binding GroupId, Converter={StaticResource CmpColorToVisibilityCvt}}">
<Border.Background>
<MultiBinding Converter="{StaticResource CmpColorOrBrushToColorBrushCvt}">
<Binding Path="GroupId" />
<Binding Path="Background" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}" />
</MultiBinding>
</Border.Background>
</Border>
<!-- 不在计算状态 -->
<Border
Grid.Column="1"
Margin="0,0,8,0"
Background="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Background}">
<Border.Visibility>
<MultiBinding Converter="{StaticResource StateFinishedResultSucceededToVisibilityCvt}">
<Binding Path="State" />
<Binding Path="Result" />
</MultiBinding>
</Border.Visibility>
<Border.InputBindings>
<MouseBinding
Command="{Binding TableColumnDoubleClickCmd}"
CommandParameter="{Binding Source={x:Static local:Settings.Current}, Path=HashValueColumnLeftDoubleClick}"
MouseAction="LeftDoubleClick" />
</Border.InputBindings>
<TextBlock
VerticalAlignment="Center"
Text="{Binding CurrentHashString}"
TextTrimming="CharacterEllipsis"
ToolTip="{Binding ModelDetails}" />
</Border>
<TextBlock
Grid.Column="1"
Margin="0,0,8,0"
VerticalAlignment="Center"
Text="{Binding ErrorDetails}"
TextTrimming="CharacterEllipsis">
<TextBlock.Visibility>
<MultiBinding Converter="{StaticResource StateNotRunningResultSucceededToVisibilityCvt}">
<Binding Path="State" />
<Binding Path="Result" />
</MultiBinding>
</TextBlock.Visibility>
</TextBlock>
<!-- 正在计算状态 -->
<!-- ProgressBar的Value绑定需是OneWay,因为默认TwoWay和private set的Progress无法成功绑定 -->
<ProgressBar
Grid.Column="1"
Margin="0,0,8,0"
Maximum="{Binding MaxProgress}"
Visibility="{Binding State, Converter={StaticResource StateRunningToVisiblityCvt}}"
Value="{Binding Progress, Mode=OneWay}" />
<Button
Grid.Column="3"
Padding="4"
Command="{Binding ShutdownModelSelfCmd}"
Content="&#xe61f;"
FontFamily="{StaticResource IconFont}"
FontSize="15pt"
Foreground="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Foreground}"
Style="{StaticResource ImageButtonStyle1}"
ToolTip="停止..."
Visibility="{Binding State, Converter={StaticResource StateRunningToVisiblityCvt}}" />
<Button
Grid.Column="4"
Padding="4"
Command="{Binding PauseOrContinueModelSelfCmd}"
Content="{Binding State, Converter={StaticResource SubBtnPauseOrContinueTextCvt}}"
FontFamily="{StaticResource IconFont}"
FontSize="15pt"
Foreground="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Foreground}"
Style="{StaticResource ImageButtonStyle1}"
ToolTip="{Binding State, Converter={StaticResource SubBtnPauseToolTipCvt}}"
Visibility="{Binding State, Converter={StaticResource StateRunningToVisiblityCvt}}" />
<!-- 正排队 -->
<Button
Grid.Column="4"
Padding="4"
Command="{Binding ShutdownModelSelfCmd}"
Content="&#xe620;"
FontFamily="{StaticResource IconFont}"
FontSize="15pt"
Foreground="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Foreground}"
Style="{StaticResource ImageButtonStyle1}"
ToolTip="取消..."
Visibility="{Binding State, Converter={StaticResource StateWaitingToVisiblityCvt}}" />
<!-- 已成功 -->
<Button
Grid.Column="2"
Width="21"
Height="21"
Margin="0,0,4,0"
d:DataContext="{d:DesignInstance local:HashViewModel}"
Command="{Binding ShowHashDetailsWindowCmd}"
Content="{Binding AlgoInOutModels, Converter={StaticResource AlgoInOutModelsToNumberCvt}}"
Foreground="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Foreground}"
Style="{StaticResource GrayRoundTipButton1}"
ToolTip="详情...">
<Button.Visibility>
<MultiBinding Converter="{StaticResource StateFinishedResultSucceededToVisibilityCvt}">
<Binding Path="State" />
<Binding Path="Result" />
</MultiBinding>
</Button.Visibility>
</Button>
<Button
Grid.Column="3"
Padding="4"
Command="{Binding CopyThisModelCurHashCmd}"
Content="&#xe718;"
FontFamily="{StaticResource IconFont}"
FontSize="14pt"
Foreground="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Foreground}"
Style="{StaticResource ImageButtonStyle1}"
ToolTip="按模板复制该行当前结果...">
<Button.Visibility>
<MultiBinding Converter="{StaticResource StateFinishedResultSucceededToVisibilityCvt}">
<Binding Path="State" />
<Binding Path="Result" />
</MultiBinding>
</Button.Visibility>
</Button>
<Button
Grid.Column="4"
Padding="4"
Command="{Binding CopyThisModelAllHashesCmd}"
Content="&#xe751;"
FontFamily="{StaticResource IconFont}"
FontSize="14pt"
Foreground="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Foreground}"
Style="{StaticResource ImageButtonStyle1}"
ToolTip="按模板复制该行所有结果...">
<Button.Visibility>
<MultiBinding Converter="{StaticResource StateFinishedResultSucceededToVisibilityCvt}">
<Binding Path="State" />
<Binding Path="Result" />
</MultiBinding>
</Button.Visibility>
</Button>
<!-- 未成功 -->
<Button
Grid.Column="4"
Padding="4"
Command="{Binding RestartModelSelfCmd}"
Content="&#xe621;"
FontFamily="{StaticResource IconFont}"
FontSize="14pt"
Foreground="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Foreground}"
Style="{StaticResource ImageButtonStyle1}"
ToolTip="开始...">
<Button.Visibility>
<MultiBinding Converter="{StaticResource StateNoStateFinishedResultNotSucceedToVisibilityCvt}">
<Binding Path="State" />
<Binding Path="Result" />
</MultiBinding>
</Button.Visibility>
</Button>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
CanUserSort="True"
Header="输出方式"
SortMemberPath="SelectedOutputType"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=NoOutputTypeColumn, Converter={StaticResource TrueToVisibilityHiddenCvt}, Mode=OneWay}">
<DataGridTemplateColumn.HeaderStyle>
<Style BasedOn="{StaticResource DataGridColumnHeaderStyle}" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGridTemplateColumn.HeaderStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox
Margin="2"
VerticalAlignment="Center"
DisplayMemberPath="Display"
ItemsSource="{Binding Path=(local:SettingsViewModel.AvailableOutputTypes)}"
SelectedValue="{Binding SelectedOutputType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedValuePath="ItemValue"
Style="{StaticResource ComboBoxStyle2}"
ToolTip="指定计算哈希结果的显示方式:&#10;Base64:以 Base64 编码字符显示计算结果,某些软件配置需要此格式&#10;Hex大写:常用的显示方式,以十六进制大写字母方式显示计算结果&#10;Hex小写:常用的显示方式,以十六进制小写字母方式显示计算结果" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
MinWidth="80"
CanUserSort="True"
Header="任务耗时 (秒)"
SortMemberPath="DurationofTask"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=NoDurationColumn, Converter={StaticResource TrueToVisibilityHiddenCvt}, Mode=OneWay}">
<DataGridTemplateColumn.HeaderStyle>
<Style BasedOn="{StaticResource DataGridColumnHeaderStyle}" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGridTemplateColumn.HeaderStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Border Background="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}, Path=Background}">
<Border.InputBindings>
<MouseBinding
Command="{Binding TableColumnDoubleClickCmd}"
CommandParameter="{Binding Source={x:Static local:Settings.Current}, Path=DurationColumnLeftDoubleClick}"
MouseAction="LeftDoubleClick" />
</Border.InputBindings>
<TextBlock
HorizontalAlignment="Center"
VerticalAlignment="Center"
Text="{Binding DurationofTask, StringFormat=f2}" />
</Border>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
CanUserSort="True"
Header="导出"
SortMemberPath="CurrentInOutModel.Export"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=NoExportColumn, Converter={StaticResource TrueToVisibilityHiddenCvt}, Mode=OneWay}">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox
HorizontalAlignment="Center"
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}, AncestorLevel=1}, Path=DataContext.ChangeAlgosExportStateCmd}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}, Path=DataContext}"
IsChecked="{Binding CurrentInOutModel.Export, Mode=OneWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn
MinWidth="60"
CanUserSort="True"
Header="校验结果"
SortMemberPath="CurrentInOutModel.HashCmpResult"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=NoCmpResultColumn, Converter={StaticResource TrueToVisibilityHiddenCvt}, Mode=OneWay}">
<DataGridTemplateColumn.HeaderStyle>
<Style BasedOn="{StaticResource DataGridColumnHeaderStyle}" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="ToolTipService.ShowDuration" Value="60000" />
<Setter Property="ToolTip" Value="{Binding DataContext.Report, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}, AncestorLevel=1}}" />
</Style>
</DataGridTemplateColumn.HeaderStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Center" VerticalAlignment="Center">
<Grid.Visibility>
<MultiBinding Converter="{StaticResource AlgoModelAndCmpResToVisibilityCvt}">
<Binding Path="CurrentInOutModel" />
<Binding Path="CurrentInOutModel.HashCmpResult" />
</MultiBinding>
</Grid.Visibility>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Label
Grid.Column="0"
Padding="3"
Background="White"
BorderThickness="0"
Content="{Binding CurrentInOutModel.HashCmpResult, Converter={StaticResource ComparisonResultToIconFontTextCvt}}"
FontFamily="{StaticResource IconFont}"
FontSize="21px"
Foreground="{Binding CurrentInOutModel.HashCmpResult, Converter={StaticResource ComparisonResultToForegroundCvt}}" />
<TextBlock
Grid.Column="1"
Margin="4,0,0,0"
VerticalAlignment="Center"
Text="{Binding CurrentInOutModel.HashCmpResult, Converter={StaticResource ComparisonResultToTextCvt}}"
Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowResultText, Converter={StaticResource FalseToVisibilityCollapsedCvt}}" />
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="哈希标记" Visibility="{Binding Source={x:Static local:Settings.Current}, Path=ShowHashInTagColumn, Converter={StaticResource TrueToVisibilityVisibleCvt}}">
<DataGridTemplateColumn.HeaderStyle>
<Style BasedOn="{StaticResource DataGridColumnHeaderStyle}" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGridTemplateColumn.HeaderStyle>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="inTagHashGroup" />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="0"
Grid.ColumnSpan="2"
Padding="4"
VerticalAlignment="Center"
Background="Transparent"
Text="{Binding HcmDataFromFile, Converter={StaticResource DisplayHcmDataErrorInfoCvt}}" />
<TextBlock
Grid.Column="0"
Padding="4"
VerticalAlignment="Center"
Text="{Binding HcmDataFromFile, Converter={StaticResource DisplayHcmDataHashNameCvt}}">
<TextBlock.Background>
<MultiBinding Converter="{StaticResource CmpColorOrBrushToColorBrushCvt}">
<Binding Path="EhGroupId" />
<Binding Path="Background" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}" />
</MultiBinding>
</TextBlock.Background>
</TextBlock>
<TextBlock
Grid.Column="1"
Margin="4,0,0,0"
Padding="4"
VerticalAlignment="Center"
TextTrimming="CharacterEllipsis">
<TextBlock.Text>
<MultiBinding Converter="{StaticResource DisplayHcmDataHashValueCvt}">
<Binding Path="HcmDataFromFile" />
<Binding Path="SelectedOutputType" />
</MultiBinding>
</TextBlock.Text>
<TextBlock.Background>
<MultiBinding Converter="{StaticResource CmpColorOrBrushToColorBrushCvt}">
<Binding Path="EhGroupId" />
<Binding Path="Background" RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridRow}}" />
</MultiBinding>
</TextBlock.Background>
</TextBlock>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<ScrollViewer
Grid.Row="1"
HorizontalAlignment="Right"
VerticalScrollBarVisibility="Hidden">
<StackPanel
Margin="0,4,0,4"
VerticalAlignment="Top"
hc:Growl.Token="{x:Static local:MessageToken.MainWndMsgToken}" />
</ScrollViewer>
<Grid Grid.Row="2" Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Horizontal">
<hc:CircleProgressBar
Width="20"
Height="20"
Margin="0,0,12,0"
ArcThickness="2"
IsIndeterminate="True"
Visibility="{Binding State, Converter={StaticResource LoadingImageVisiblityCvt}}" />
<Image
Width="16"
Height="16"
Source="{StaticResource total_linesDrawingImage}"
ToolTip="表格总行数..." />
<TextBlock
Padding="4,0"
VerticalAlignment="Center"
Foreground="Gray"
Text="{Binding Source={x:Static local:MainWndViewModel.HashViewModels}, Path=Count}"
ToolTip="表格总行数..." />
<Image
Width="16"
Height="16"
Margin="6,0,0,0"
Source="{StaticResource remainingDrawingImage}"
ToolTip="待计算行数..." />
<TextBlock
Padding="4,0"
VerticalAlignment="Center"
Foreground="Gray"
Text="{Binding TobeComputedModelsCount}"
ToolTip="待计算行数..." />
</StackPanel>
<TextBox
Grid.Column="1"
Margin="8,0,0,0"
Padding="4,2"
hc:InfoElement.Placeholder="哈希值校验依据:可在此输入单个或多个哈希值(每行一个)、使用后面的 [...] 按钮选择 [哈希值清单] 文件、粘贴 [哈希值清单] 的单行或多行内容"
AcceptsReturn="True"
MaxLines="3"
PreviewDragOver="TextBoxHashStringOrChecklistPathPreviewDragOver"
PreviewDrop="TextBoxHashOrFilePathPreviewDrop"
Style="{StaticResource TextBoxExtend}"
Text="{Binding HashStringOrChecklistPath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
VerticalScrollBarVisibility="Auto" />
<Button
Grid.Column="2"
Margin="8,0,0,0"
Padding="8,4"
VerticalAlignment="Center"
Command="{Binding SelectChecklistFileCmd}"
Content="..."
ToolTip="打开【选择文件】对话框选择【哈希值清单】文件,将选择的文件路径填充到【哈希值校验依据】输入框中" />
<Button
Grid.Column="3"
Margin="8,0,0,0"
Padding="16,4"
VerticalAlignment="Center"
Command="{Binding StartCheckHashResultsCmd}"
Content="校验"
IsEnabled="{Binding State, Converter={StaticResource MainModelStateToBooleanCvt}}"
Style="{StaticResource ButtonPrimary}"
ToolTip="解析输入框的内容并检查哪些行的哈希值与输入框内的哈希值匹配并在【校验结果】列显示结果。&#10;如果检查时表格为空且校验依据是通用格式的【哈希值清单】文件路径,则:&#10;1. 点击【校验】后程序会自动解析文件并在相同目录下寻找要计算哈希值的文件完成计算并显示校验结果。&#10;2. 通用格式的【文件哈希值清单】文件请参考程序【导出结果】功能导出的文件的内容排布格式。" />
</Grid>
</Grid>
</Window>
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C#
1
https://gitee.com/hrpzcf/HashCalculator.git
git@gitee.com:hrpzcf/HashCalculator.git
hrpzcf
HashCalculator
HashCalculator
7e28f751b1f115b1a0ab565c2cf17c6ae82c7cce

搜索帮助