PageVersionMod.xaml.vb 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475
  1. Public Class PageVersionMod
  2. #Region "初始化"
  3. Private IsLoad As Boolean = False
  4. Public Sub PageOther_Loaded() Handles Me.Loaded
  5. PanBack.ScrollToHome()
  6. RefreshList()
  7. '非重复加载部分
  8. If IsLoad Then Exit Sub
  9. IsLoad = True
  10. #If DEBUG Then
  11. BtnManageCheck.Visibility = Visibility.Visible
  12. #End If
  13. End Sub
  14. ''' <summary>
  15. ''' 刷新 Mod 列表。
  16. ''' </summary>
  17. Public Sub RefreshList(Optional ForceReload As Boolean = False)
  18. If McModLoader.State = LoadState.Loading Then Exit Sub
  19. If LoaderFolderRun(McModLoader, PageVersionLeft.Version.PathIndie & "mods\", If(ForceReload, LoaderFolderRunType.ForceRun, LoaderFolderRunType.RunOnUpdated)) Then
  20. PanBack.ScrollToHome()
  21. SearchBox.Text = ""
  22. End If
  23. End Sub
  24. Private Sub LoaderInit() Handles Me.Initialized
  25. PageLoaderInit(Load, PanLoad, PanAllBack, Nothing, McModLoader, AddressOf Load_Finish, AutoRun:=False)
  26. End Sub
  27. Private Sub Load_Click(sender As Object, e As MouseButtonEventArgs) Handles Load.Click
  28. If McModLoader.State = LoadState.Failed Then
  29. LoaderFolderRun(McModLoader, PageVersionLeft.Version.PathIndie & "mods\", LoaderFolderRunType.ForceRun)
  30. End If
  31. End Sub
  32. #End Region
  33. #Region "UI 化"
  34. ''' <summary>
  35. ''' 将 Mod 列表加载为 UI。
  36. ''' </summary>
  37. Private Sub Load_Finish(Loader As LoaderTask(Of String, List(Of McMod)))
  38. Dim List As List(Of McMod) = Loader.Output
  39. Try
  40. PanList.Children.Clear()
  41. '判断应该显示哪一个页面
  42. If List.Count = 0 Then
  43. PanEmpty.Visibility = Visibility.Visible
  44. PanBack.Visibility = Visibility.Collapsed
  45. Exit Sub
  46. Else
  47. PanBack.Visibility = Visibility.Visible
  48. PanEmpty.Visibility = Visibility.Collapsed
  49. End If
  50. '建立 StackPanel
  51. Dim NewStack As New StackPanel With {.Margin = New Thickness(20, MyCard.SwapedHeight, 18, If(List.Count > 0, 20, 0)), .VerticalAlignment = VerticalAlignment.Top, .RenderTransform = New TranslateTransform(0, 0)}
  52. For Each ModEntity As McMod In List
  53. NewStack.Children.Add(McModListItem(ModEntity))
  54. Next
  55. '建立 MyCard
  56. Dim NewCard As New MyCard With {.Title = McModGetTitle(List), .Margin = New Thickness(0, 0, 0, 15)}
  57. NewCard.Children.Add(NewStack)
  58. PanList.Children.Add(NewCard)
  59. '显示提示
  60. If List.Count > 0 AndAlso Not Setup.Get("HintModDisable") Then
  61. Setup.Set("HintModDisable", True)
  62. Hint("直接点击某个 Mod 项即可将它禁用!")
  63. End If
  64. Catch ex As Exception
  65. Log(ex, "加载 Mod 列表 UI 失败", LogLevel.Feedback)
  66. End Try
  67. End Sub
  68. ''' <summary>
  69. ''' 获取 Card 的标题。
  70. ''' </summary>
  71. Private Function McModGetTitle(List As List(Of McMod)) As String
  72. Dim Counter = {0, 0, 0}
  73. For Each ModEntity As McMod In List
  74. Counter(ModEntity.State) += 1
  75. Next
  76. If List.Count = 0 Then
  77. '全空
  78. Return "未找到任何 Mod"
  79. ElseIf Counter(McMod.McModState.Disabled) = 0 AndAlso Counter(McMod.McModState.Unavaliable) = 0 Then
  80. '只有启用的 Mod
  81. Return "Mod 列表(" & Counter(McMod.McModState.Fine) & ")"
  82. Else
  83. '混合种类
  84. Dim TypeList As New List(Of String)
  85. If Counter(McMod.McModState.Fine) > 0 Then TypeList.Add("启用 " & Counter(McMod.McModState.Fine))
  86. If Counter(McMod.McModState.Disabled) > 0 Then TypeList.Add("禁用 " & Counter(McMod.McModState.Disabled))
  87. If Counter(McMod.McModState.Unavaliable) > 0 Then TypeList.Add("错误 " & Counter(McMod.McModState.Unavaliable))
  88. Return "Mod 列表(" & Join(TypeList, ",") & ")"
  89. End If
  90. End Function
  91. Private Function McModListItem(Entry As McMod) As MyListItem
  92. '图标
  93. Dim Logo As String
  94. Select Case Entry.State
  95. Case McMod.McModState.Fine
  96. Logo = "pack://application:,,,/images/Blocks/RedstoneLampOn.png"
  97. Case McMod.McModState.Disabled
  98. Logo = "pack://application:,,,/images/Blocks/RedstoneLampOff.png"
  99. Case Else '出错
  100. Logo = "pack://application:,,,/images/Blocks/RedstoneBlock.png"
  101. End Select
  102. '文本
  103. Dim Title As String
  104. If Entry.State = McMod.McModState.Disabled Then
  105. Title = GetFileNameWithoutExtentionFromPath(Entry.Path.Substring(0, Entry.Path.Count - ".disabled".Count)) & "(已禁用)"
  106. Else
  107. Title = GetFileNameWithoutExtentionFromPath(Entry.Path)
  108. End If
  109. Dim Desc As String
  110. If Entry.Version Is Nothing OrElse Entry.Description IsNot Nothing Then
  111. Desc = Entry.Name & If(Entry.Version Is Nothing, "", " (" & Entry.Version & ")") & " : " & If(Entry.Description, Entry.Path)
  112. ElseIf Entry.IsFileAvailable Then
  113. Desc = Entry.Path
  114. Else
  115. Desc = "存在错误 : " & Entry.Path
  116. End If
  117. 'Desc = If(Entry.ModId, "无可用名称") & " (" & If(Entry.Version, "无可用版本") & ")"
  118. 'If Entry.Dependencies.Count > 0 Then
  119. ' Dim DepList As New List(Of String)
  120. ' For Each Dep In Entry.Dependencies
  121. ' DepList.Add(Dep.Key & If(Dep.Value Is Nothing, "", "@" & Dep.Value))
  122. ' Next
  123. ' Desc += " : " & Join(DepList, ", ")
  124. 'End If
  125. '实例化
  126. Dim NewItem As New MyListItem With {.Logo = Logo, .SnapsToDevicePixels = True, .Title = Title, .Info = Desc, .Height = 42, .Type = MyListItem.CheckType.Clickable, .Tag = Entry}
  127. NewItem.PaddingRight = If(Entry.IsFileAvailable, 73, 55)
  128. '事件
  129. NewItem.ContentHandler = AddressOf McModContent
  130. Return NewItem
  131. End Function
  132. Private Sub McModContent(sender As MyListItem, e As EventArgs)
  133. Dim ModEntity As McMod = sender.Tag
  134. '注册点击事件
  135. AddHandler sender.Click, AddressOf Item_Click
  136. '图标按钮
  137. Dim BtnDel As New MyIconButton With {.LogoScale = 1.1, .Logo = Logo.IconButtonDelete, .Tag = sender}
  138. BtnDel.ToolTip = "删除"
  139. ToolTipService.SetPlacement(BtnDel, Primitives.PlacementMode.Center)
  140. ToolTipService.SetVerticalOffset(BtnDel, 30)
  141. ToolTipService.SetHorizontalOffset(BtnDel, 2)
  142. AddHandler BtnDel.Click, AddressOf Delete_Click
  143. Dim BtnOpen As New MyIconButton With {.LogoScale = 1.15, .Logo = Logo.IconButtonOpen, .Tag = sender}
  144. BtnOpen.ToolTip = "打开文件位置"
  145. ToolTipService.SetPlacement(BtnOpen, Primitives.PlacementMode.Center)
  146. ToolTipService.SetVerticalOffset(BtnOpen, 30)
  147. ToolTipService.SetHorizontalOffset(BtnOpen, 2)
  148. AddHandler BtnOpen.Click, AddressOf Open_Click
  149. If ModEntity.IsFileAvailable Then
  150. Dim BtnCont As New MyIconButton With {.LogoScale = 1.05, .Logo = Logo.IconButtonInfo, .Tag = sender}
  151. BtnCont.ToolTip = "详情"
  152. ToolTipService.SetPlacement(BtnCont, Primitives.PlacementMode.Center)
  153. ToolTipService.SetVerticalOffset(BtnCont, 30)
  154. ToolTipService.SetHorizontalOffset(BtnCont, 2)
  155. AddHandler BtnCont.Click, AddressOf Info_Click
  156. AddHandler sender.MouseRightButtonDown, AddressOf Info_Click
  157. sender.Buttons = {BtnCont, BtnOpen, BtnDel}
  158. Else
  159. sender.Buttons = {BtnOpen, BtnDel}
  160. End If
  161. End Sub
  162. #End Region
  163. #Region "管理"
  164. ''' <summary>
  165. ''' 打开 Mods 文件夹。
  166. ''' </summary>
  167. Private Sub BtnManageOpen_Click(sender As Object, e As EventArgs) Handles BtnManageOpen.Click, BtnHintOpen.Click
  168. Try
  169. Directory.CreateDirectory(PageVersionLeft.Version.PathIndie & "mods\")
  170. OpenExplorer("""" & PageVersionLeft.Version.PathIndie & "mods\""")
  171. Catch ex As Exception
  172. Log(ex, "打开 Mods 文件夹失败", LogLevel.Msgbox)
  173. End Try
  174. End Sub
  175. #If DEBUG Then
  176. ''' <summary>
  177. ''' 检查 Mod。
  178. ''' </summary>
  179. Private Sub BtnManageCheck_Click(sender As Object, e As EventArgs) Handles BtnManageCheck.Click
  180. Try
  181. Dim Result = McModCheck(PageVersionLeft.Version, McModLoader.Output)
  182. If Result.Count > 0 Then
  183. MyMsgBox(Join(Result, vbCrLf & vbCrLf), "Mod 检查结果")
  184. Else
  185. Hint("Mod 检查完成,未发现任何问题!", HintType.Finish)
  186. End If
  187. Catch ex As Exception
  188. Log(ex, "进行 Mod 检查时出错", LogLevel.Feedback)
  189. End Try
  190. End Sub
  191. #End If
  192. ''' <summary>
  193. ''' 一键启用 / 禁用。
  194. ''' </summary>
  195. Private Sub BtnManageChange_Click(sender As MyButton, e As EventArgs) Handles BtnManageEnabled.Click, BtnManageDisabled.Click
  196. Dim IsSuccessful As Boolean = True
  197. Try
  198. Dim IsDisable As Boolean = sender.Text.Contains("禁用")
  199. For Each ModEntity In McModLoader.Output
  200. Dim NewPath As String = Nothing
  201. If ModEntity.State = McMod.McModState.Fine And IsDisable Then
  202. '禁用
  203. NewPath = ModEntity.Path & ".disabled"
  204. ElseIf ModEntity.State = McMod.McModState.Disabled AndAlso Not IsDisable Then
  205. '启用
  206. NewPath = ModEntity.Path.Substring(0, ModEntity.Path.Count - ".disabled".Count)
  207. Else
  208. Continue For
  209. End If
  210. '重命名
  211. Try
  212. If File.Exists(ModEntity.Path) Then
  213. File.Delete(NewPath)
  214. FileSystem.Rename(ModEntity.Path, NewPath)
  215. Else
  216. Throw New FileNotFoundException("未找到文件:" & ModEntity.Path)
  217. End If
  218. Catch ex As Exception
  219. Log(ex, "全局状态改变中重命名 Mod 失败")
  220. IsSuccessful = False
  221. End Try
  222. Next
  223. Catch ex As Exception
  224. Log(ex, "改变全部 Mod 状态失败", LogLevel.Msgbox)
  225. IsSuccessful = False
  226. Finally
  227. If Not IsSuccessful Then Hint("由于文件被占用,部分 Mod 的状态切换失败,请尝试关闭正在运行的游戏后再试!", HintType.Critical)
  228. RefreshList()
  229. End Try
  230. End Sub
  231. #End Region
  232. #Region "单个 Mod 项"
  233. '点击:切换可用状态 / 显示错误原因
  234. Public Sub Item_Click(sender As MyListItem, e As EventArgs)
  235. Try
  236. Dim ModEntity As McMod = sender.Tag
  237. Dim NewPath As String = Nothing
  238. Select Case ModEntity.State
  239. Case McMod.McModState.Fine
  240. '前置检测警告
  241. If ModEntity.IsPresetMod Then
  242. If MyMsgBox("该 Mod 可能为其他 Mod 的前置,如果禁用可能导致其他 Mod 无法使用。" & vbCrLf & "你确定要继续禁用吗?", "警告", "禁用", "取消") = 2 Then Exit Sub
  243. End If
  244. NewPath = ModEntity.Path & ".disabled"
  245. Case McMod.McModState.Disabled
  246. NewPath = ModEntity.Path.Substring(0, ModEntity.Path.Count - ".disabled".Count)
  247. Case McMod.McModState.Unavaliable
  248. MyMsgBox("无法读取此 Mod 的信息。" & vbCrLf & vbCrLf & "详细的错误信息:" & GetExceptionDetail(ModEntity.FileUnavailableReason), "Mod 读取失败")
  249. Exit Sub
  250. End Select
  251. '重命名
  252. Dim NewModEntity As New McMod(NewPath)
  253. Try
  254. File.Delete(NewPath)
  255. FileSystem.Rename(ModEntity.Path, NewPath)
  256. Catch ex As FileNotFoundException
  257. Log(ex, "未找到理应存在的 Mod 文件(" & ModEntity.Path & ")")
  258. FileSystem.Rename(NewPath, ModEntity.Path)
  259. NewModEntity = New McMod(ModEntity.Path)
  260. End Try
  261. '更改 Loader 中的列表
  262. Dim IndexOfLoader As Integer = McModLoader.Output.IndexOf(ModEntity)
  263. McModLoader.Output.RemoveAt(IndexOfLoader)
  264. McModLoader.Output.Insert(IndexOfLoader, NewModEntity)
  265. '更改 UI 中的列表
  266. Dim Parent As StackPanel = sender.Parent
  267. Dim IndexOfUi As Integer = Parent.Children.IndexOf(sender)
  268. Parent.Children.RemoveAt(IndexOfUi)
  269. Parent.Children.Insert(IndexOfUi, McModListItem(NewModEntity))
  270. '仅在非搜索页面才执行,以确保搜索页内外显示一致
  271. If String.IsNullOrWhiteSpace(SearchBox.Text) Then
  272. '改变禁用数量的显示
  273. CType(Parent.Parent, MyCard).Title = McModGetTitle(McModLoader.Output)
  274. '更新加载器状态
  275. LoaderFolderRun(McModLoader, PageVersionLeft.Version.PathIndie & "mods\", LoaderFolderRunType.UpdateOnly)
  276. End If
  277. Catch ex As Exception
  278. Log(ex, "单个状态改变中重命名 Mod 失败")
  279. Hint("切换 Mod 状态失败,请尝试关闭正在运行的游戏后再试!")
  280. LoaderFolderRun(McModLoader, PageVersionLeft.Version.PathIndie & "mods\", LoaderFolderRunType.UpdateOnly)
  281. End Try
  282. End Sub
  283. '删除
  284. Public Sub Delete_Click(sender As MyIconButton, e As EventArgs)
  285. Try
  286. Dim ListItem As MyListItem = sender.Tag
  287. Dim ModEntity As McMod = ListItem.Tag
  288. '前置检测警告
  289. If ModEntity.IsPresetMod Then
  290. If MyMsgBox("该 Mod 可能为其他 Mod 的前置,如果删除可能导致其他 Mod 无法使用。" & vbCrLf & "你确定要继续删除吗?", "警告", "删除", "取消", IsWarn:=True) = 2 Then Exit Sub
  291. End If
  292. '删除
  293. If File.Exists(ModEntity.Path) Then
  294. My.Computer.FileSystem.DeleteFile(ModEntity.Path, FileIO.UIOption.OnlyErrorDialogs, FileIO.RecycleOption.SendToRecycleBin)
  295. Else
  296. '在不明原因下删除的文件可能还在列表里,如果玩家又点了一次就会出错,总之加个判断也不碍事
  297. Log("[System] 需要删除的 Mod 文件不存在(" & ModEntity.Path & ")", LogLevel.Hint)
  298. Exit Sub
  299. End If
  300. '更改 Loader 中的列表
  301. McModLoader.Output.Remove(ModEntity)
  302. '更改 UI 中的列表
  303. Dim Parent As StackPanel = ListItem.Parent
  304. Parent.Children.Remove(ListItem)
  305. If Parent.Children.Count = 0 Then
  306. RefreshList(True)
  307. Else
  308. CType(Parent.Parent, MyCard).Title = McModGetTitle(McModLoader.Output)
  309. End If
  310. '显示提示
  311. Hint("已将 " & ModEntity.FileName & " 删除到回收站!", HintType.Finish)
  312. LoaderFolderRun(McModLoader, PageVersionLeft.Version.PathIndie & "mods\", LoaderFolderRunType.UpdateOnly)
  313. Catch ex As Exception
  314. Log(ex, "删除 Mod 失败", LogLevel.Feedback)
  315. End Try
  316. End Sub
  317. '详情
  318. Public Sub Info_Click(sender As Object, e As EventArgs)
  319. Try
  320. Dim ListItem As MyListItem
  321. ListItem = If(TypeOf sender Is MyIconButton, sender.Tag, sender)
  322. Dim ModEntity As McMod = ListItem.Tag
  323. '获取信息
  324. Dim ContentLines As New List(Of String)
  325. If ModEntity.Description IsNot Nothing Then ContentLines.Add(ModEntity.Description & vbCrLf)
  326. If ModEntity.Authors IsNot Nothing Then ContentLines.Add("作者:" & ModEntity.Authors)
  327. ContentLines.Add("文件:" & ModEntity.FileName & "(" & GetString(New FileInfo(ModEntity.Path).Length) & ")")
  328. If ModEntity.Version IsNot Nothing Then ContentLines.Add("版本:" & ModEntity.Version)
  329. If ModeDebug Then
  330. Dim DebugInfo As New List(Of String)
  331. If ModEntity.ModId IsNot Nothing Then
  332. DebugInfo.Add("Mod ID:" & ModEntity.ModId)
  333. End If
  334. If ModEntity.Dependencies.Count > 0 Then
  335. DebugInfo.Add("依赖于:")
  336. For Each Dep In ModEntity.Dependencies
  337. DebugInfo.Add(" - " & Dep.Key & If(Dep.Value Is Nothing, "", ",版本:" & Dep.Value))
  338. Next
  339. End If
  340. If DebugInfo.Count > 0 Then
  341. ContentLines.Add(vbCrLf & "—————— 调试信息 ——————")
  342. ContentLines.AddRange(DebugInfo)
  343. End If
  344. End If
  345. '获取用于搜索的 Mod 名称
  346. Dim ModOriginalName As String = ModEntity.Name.Replace(" ", "+")
  347. Dim ModSearchName As String = ModOriginalName.Substring(0, 1)
  348. For i = 1 To ModOriginalName.Count - 1
  349. Dim IsLastLower As Boolean = ModOriginalName(i - 1).ToString.ToLower.Equals(ModOriginalName(i - 1).ToString)
  350. Dim IsCurrentLower As Boolean = ModOriginalName(i).ToString.ToLower.Equals(ModOriginalName(i).ToString)
  351. If IsLastLower AndAlso Not IsCurrentLower Then
  352. '上一个字母为小写,这一个字母为大写
  353. ModSearchName += "+"
  354. End If
  355. ModSearchName += ModOriginalName(i)
  356. Next
  357. ModSearchName = ModSearchName.Replace("++", "+").Replace("pti+Fine", "ptiFine")
  358. '显示
  359. If ModEntity.Url Is Nothing Then
  360. If MyMsgBox(Join(ContentLines, vbCrLf), ModEntity.Name, "确定", "百科搜索") = 2 Then
  361. OpenWebsite("https://www.mcmod.cn/s?key=" & ModSearchName & "&site=all&filter=0")
  362. End If
  363. Else
  364. Select Case MyMsgBox(Join(ContentLines, vbCrLf), ModEntity.Name, "确定", "百科搜索", "打开官网")
  365. Case 2
  366. OpenWebsite("https://www.mcmod.cn/s?key=" & ModSearchName & "&site=all&filter=0")
  367. Case 3
  368. OpenWebsite(ModEntity.Url)
  369. End Select
  370. End If
  371. Catch ex As Exception
  372. Log(ex, "获取 Mod 详情失败", LogLevel.Feedback)
  373. End Try
  374. End Sub
  375. '打开文件所在的位置
  376. Public Sub Open_Click(sender As MyIconButton, e As EventArgs)
  377. Try
  378. Dim ListItem As MyListItem = sender.Tag
  379. Dim ModEntity As McMod = ListItem.Tag
  380. OpenExplorer("/select,""" & ModEntity.Path & """")
  381. Catch ex As Exception
  382. Log(ex, "打开 Mod 文件位置失败", LogLevel.Feedback)
  383. End Try
  384. End Sub
  385. #End Region
  386. Public Sub SearchRun() Handles SearchBox.TextChanged
  387. If String.IsNullOrWhiteSpace(SearchBox.Text) Then
  388. '隐藏
  389. LoaderFolderRun(McModLoader, PageVersionLeft.Version.PathIndie & "mods\", LoaderFolderRunType.RunOnUpdated)
  390. AniStart({
  391. AaOpacity(PanSearch, -PanSearch.Opacity, 100),
  392. AaCode(Sub()
  393. PanSearch.Height = 0
  394. PanSearch.Visibility = Visibility.Collapsed
  395. PanList.Visibility = Visibility.Visible
  396. PanManage.Visibility = Visibility.Visible
  397. End Sub,, True),
  398. AaOpacity(PanList, 1 - PanList.Opacity, 150, 30),
  399. AaOpacity(PanManage, 1 - PanManage.Opacity, 150, 30)
  400. }, "FrmVersionMod Search Switch", True)
  401. Else
  402. '构造请求
  403. Dim QueryList As New List(Of SearchEntry(Of McMod))
  404. For Each Entry As McMod In McModLoader.Output
  405. QueryList.Add(New SearchEntry(Of McMod) With {
  406. .Item = Entry,
  407. .SearchSource = New List(Of KeyValuePair(Of String, Double)) From {
  408. New KeyValuePair(Of String, Double)(Entry.Name, 1),
  409. New KeyValuePair(Of String, Double)(Entry.FileName, 1),
  410. New KeyValuePair(Of String, Double)(If(Entry.Description, ""), 0.5)
  411. }
  412. })
  413. Next
  414. '进行搜索,构造列表
  415. Dim SearchResult = Search(QueryList, SearchBox.Text, MaxBlurCount:=5, MinBlurSimilarity:=0.35)
  416. PanSearchList.Children.Clear()
  417. If SearchResult.Count = 0 Then
  418. PanSearch.Title = "无搜索结果"
  419. PanSearchList.Visibility = Visibility.Collapsed
  420. Else
  421. PanSearch.Title = "搜索结果"
  422. For Each Result In SearchResult
  423. Dim Item = McModListItem(Result.Item)
  424. If ModeDebug Then Item.Info = If(Result.AbsoluteRight, "完全匹配,", "") & "相似度:" & Math.Round(Result.Similarity, 3) & "," & Item.Info
  425. PanSearchList.Children.Add(Item)
  426. Next
  427. PanSearchList.Visibility = Visibility.Visible
  428. End If
  429. '显示
  430. AniStart({
  431. AaOpacity(PanList, -PanList.Opacity, 100),
  432. AaOpacity(PanManage, -PanManage.Opacity, 100),
  433. AaCode(Sub()
  434. PanList.Visibility = Visibility.Collapsed
  435. PanManage.Visibility = Visibility.Collapsed
  436. PanSearch.Visibility = Visibility.Visible
  437. PanSearch.TriggerForceResize()
  438. End Sub,, True),
  439. AaOpacity(PanSearch, 1 - PanSearch.Opacity, 200, 60)
  440. }, "FrmVersionMod Search Switch", True)
  441. End If
  442. End Sub
  443. End Class