Loading CountDownList/Class/ListCore.cs +13 −5 Original line number Diff line number Diff line Loading @@ -27,8 +27,16 @@ namespace CountDownList.Class /// </summary> public class ListCore : ClassName { public VirtualizingStackPanel DoingPanel, WcPanel, CountPanel; public Expander DoingE, WcE, CountE; public StackPanel DoingPanel, WcPanel, CountPanel; public Expander DoingE, WcE, CountE; public FrameworkElement RootWindow; NotifyCore notifyCore = new(); Loading @@ -36,9 +44,9 @@ namespace CountDownList.Class public bool IsOpen = true; public ListCore ( VirtualizingStackPanel doingPanel, VirtualizingStackPanel wcPanel, VirtualizingStackPanel countPanel, StackPanel doingPanel, StackPanel wcPanel, StackPanel countPanel, Expander doingE, Expander wcE, Expander countE, Loading CountDownList/Controls/ListLabel.xaml.cs +74 −73 Original line number Diff line number Diff line Loading @@ -95,6 +95,16 @@ namespace CountDownList.Controls public void Dispose() { App.logFile.Info($"触发销毁ListLabel({Title})", className); IsStop = true; // 解除所有绑定 BindingOperations.ClearAllBindings(this); // 解除事件处理程序 this.Unloaded -= Button_Click; GC.Collect(); GC.SuppressFinalize(this); } Loading Loading @@ -171,39 +181,53 @@ namespace CountDownList.Controls public void SyncTime() { if (IsStop) return; string timeText; if (!IsStop) { if (IsCountMode) timeText = (DateTime.Now - StartTime).ToString(TimeFormat); { //正计时 TimeText.Text = (StartTime - DateTime.Now).ToString(TimeFormat); TimeTextFull.Text = (StartTime - DateTime.Now).ToString(TimeFormat); } else timeText = (EndTime - DateTime.Now).ToString(TimeFormat); Dispatcher.Invoke(() => { TimeText.Text = timeText; TimeTextFull.Text = timeText; }); //倒计时 TimeText.Text = (EndTime - DateTime.Now).ToString(TimeFormat); TimeTextFull.Text = (EndTime - DateTime.Now).ToString(TimeFormat); } } } public void SyncProgress() { if (IsStop) return; double progress; if (!IsStop) { if (IsCountMode) { progress = 0; Dispatcher.Invoke(() => ProgressBar.Visibility = Visibility.Collapsed); ProgressBar.Visibility = Visibility.Collapsed; ProgressText.Text = $"已经过去"; ProgressTextFull.Visibility = Visibility.Collapsed; } else { progress = (DateTime.Now - StartTime).TotalMilliseconds / (EndTime - StartTime).TotalMilliseconds; Dispatcher.Invoke(() => ProgressBar.Visibility = Visibility.Visible; if (!((EndTime - DateTime.Now).TotalMilliseconds <= 0d)) { ProgressRectangleGeometry.Rect = new Rect(0, 0, ActualWidth * progress, 6); ProgressText.Text = $"{progress:P0}"; }); Progress = ((EndTime - DateTime.Now).TotalMilliseconds / (EndTime - StartTime).TotalMilliseconds) * 100; ProgressText.Text = $"{100 - Progress:F2}%"; ProgressTextFull.Text = $"{100 - Progress:F2}%"; ProgressRectangleGeometry.Rect = new(0, 0, (d.ActualWidth / 100) * (100 - Progress), 6); ProgressTextFull.Visibility = Visibility.Visible; } else { Progress = 0; ProgressText.Text = $"已完成"; ProgressTextFull.Text = $"100%"; ProgressRectangleGeometry.Rect = new(0, 0, d.ActualWidth, 6); } } } } Loading Loading @@ -478,28 +502,5 @@ namespace CountDownList.Controls } } #pragma warning restore CS8602 // 解引用可能出现空引用。 public void BatchUpdate() { // 禁用布局计算 this.BeginInit(); SyncProgress(); SyncTime(); SyncTitle(); // 恢复并触发单次布局 this.EndInit(); } } } CountDownList/MainWindow.xaml +9 −13 Original line number Diff line number Diff line Loading @@ -134,29 +134,25 @@ <GradientStop Color="White" Offset="0.98"/> </LinearGradientBrush> </local:MyScrollViewer.OpacityMask> <VirtualizingStackPanel VirtualizingPanel.VirtualizationMode="Recycling" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.CacheLength="2,2" > <StackPanel> <Expander RenderOptions.ClearTypeHint="Enabled" x:Name="DoingE" Background="#00F7F7F7" BorderBrush="{x:Null}" IsExpanded="True" Header="进行中(5)" Margin="4,0,4,0" Foreground="#FFF7F7F7"> <VirtualizingStackPanel x:Name="doingList"> <StackPanel x:Name="doingList"> <!-- 进行中的倒计时项 --> </VirtualizingStackPanel> </StackPanel> </Expander> <Expander RenderOptions.ClearTypeHint="Enabled" x:Name="countE" Background="#00000000" BorderBrush="{x:Null}" Header="正计时(5)" Margin="4,0,4,0" Foreground="#FFF7F7F7" IsExpanded="True"> <VirtualizingStackPanel x:Name="count"> <StackPanel x:Name="count"> <!-- 正计时项 --> </VirtualizingStackPanel> </StackPanel> </Expander> <Expander RenderOptions.ClearTypeHint="Enabled" x:Name="wcE" Background="#00000000" BorderBrush="{x:Null}" Header="已完成(5)" Margin="4,0,4,0" Foreground="#FFF7F7F7"> <VirtualizingStackPanel x:Name="wancheng"> <StackPanel x:Name="wancheng"> <!-- 已完成的倒计时项 --> </VirtualizingStackPanel> </StackPanel> </Expander> <TextBlock x:Name="Version" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#7FF7F7F7" Margin="0,48,0,0"> Count Down List V1.0 Countdown List V1.0 </TextBlock> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#7FF7F7F7"> By shRabbit Loading @@ -164,7 +160,7 @@ <TextBlock x:Name="newVerisonTip" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#7FF7F7F7" Margin="0,0,0,48" Visibility="Hidden"> <Hyperlink x:Name="newVerisonTipContent" Foreground="White"></Hyperlink> </TextBlock> </VirtualizingStackPanel> </StackPanel> </local:MyScrollViewer> </Grid> </Border> Loading Loading
CountDownList/Class/ListCore.cs +13 −5 Original line number Diff line number Diff line Loading @@ -27,8 +27,16 @@ namespace CountDownList.Class /// </summary> public class ListCore : ClassName { public VirtualizingStackPanel DoingPanel, WcPanel, CountPanel; public Expander DoingE, WcE, CountE; public StackPanel DoingPanel, WcPanel, CountPanel; public Expander DoingE, WcE, CountE; public FrameworkElement RootWindow; NotifyCore notifyCore = new(); Loading @@ -36,9 +44,9 @@ namespace CountDownList.Class public bool IsOpen = true; public ListCore ( VirtualizingStackPanel doingPanel, VirtualizingStackPanel wcPanel, VirtualizingStackPanel countPanel, StackPanel doingPanel, StackPanel wcPanel, StackPanel countPanel, Expander doingE, Expander wcE, Expander countE, Loading
CountDownList/Controls/ListLabel.xaml.cs +74 −73 Original line number Diff line number Diff line Loading @@ -95,6 +95,16 @@ namespace CountDownList.Controls public void Dispose() { App.logFile.Info($"触发销毁ListLabel({Title})", className); IsStop = true; // 解除所有绑定 BindingOperations.ClearAllBindings(this); // 解除事件处理程序 this.Unloaded -= Button_Click; GC.Collect(); GC.SuppressFinalize(this); } Loading Loading @@ -171,39 +181,53 @@ namespace CountDownList.Controls public void SyncTime() { if (IsStop) return; string timeText; if (!IsStop) { if (IsCountMode) timeText = (DateTime.Now - StartTime).ToString(TimeFormat); { //正计时 TimeText.Text = (StartTime - DateTime.Now).ToString(TimeFormat); TimeTextFull.Text = (StartTime - DateTime.Now).ToString(TimeFormat); } else timeText = (EndTime - DateTime.Now).ToString(TimeFormat); Dispatcher.Invoke(() => { TimeText.Text = timeText; TimeTextFull.Text = timeText; }); //倒计时 TimeText.Text = (EndTime - DateTime.Now).ToString(TimeFormat); TimeTextFull.Text = (EndTime - DateTime.Now).ToString(TimeFormat); } } } public void SyncProgress() { if (IsStop) return; double progress; if (!IsStop) { if (IsCountMode) { progress = 0; Dispatcher.Invoke(() => ProgressBar.Visibility = Visibility.Collapsed); ProgressBar.Visibility = Visibility.Collapsed; ProgressText.Text = $"已经过去"; ProgressTextFull.Visibility = Visibility.Collapsed; } else { progress = (DateTime.Now - StartTime).TotalMilliseconds / (EndTime - StartTime).TotalMilliseconds; Dispatcher.Invoke(() => ProgressBar.Visibility = Visibility.Visible; if (!((EndTime - DateTime.Now).TotalMilliseconds <= 0d)) { ProgressRectangleGeometry.Rect = new Rect(0, 0, ActualWidth * progress, 6); ProgressText.Text = $"{progress:P0}"; }); Progress = ((EndTime - DateTime.Now).TotalMilliseconds / (EndTime - StartTime).TotalMilliseconds) * 100; ProgressText.Text = $"{100 - Progress:F2}%"; ProgressTextFull.Text = $"{100 - Progress:F2}%"; ProgressRectangleGeometry.Rect = new(0, 0, (d.ActualWidth / 100) * (100 - Progress), 6); ProgressTextFull.Visibility = Visibility.Visible; } else { Progress = 0; ProgressText.Text = $"已完成"; ProgressTextFull.Text = $"100%"; ProgressRectangleGeometry.Rect = new(0, 0, d.ActualWidth, 6); } } } } Loading Loading @@ -478,28 +502,5 @@ namespace CountDownList.Controls } } #pragma warning restore CS8602 // 解引用可能出现空引用。 public void BatchUpdate() { // 禁用布局计算 this.BeginInit(); SyncProgress(); SyncTime(); SyncTitle(); // 恢复并触发单次布局 this.EndInit(); } } }
CountDownList/MainWindow.xaml +9 −13 Original line number Diff line number Diff line Loading @@ -134,29 +134,25 @@ <GradientStop Color="White" Offset="0.98"/> </LinearGradientBrush> </local:MyScrollViewer.OpacityMask> <VirtualizingStackPanel VirtualizingPanel.VirtualizationMode="Recycling" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.CacheLength="2,2" > <StackPanel> <Expander RenderOptions.ClearTypeHint="Enabled" x:Name="DoingE" Background="#00F7F7F7" BorderBrush="{x:Null}" IsExpanded="True" Header="进行中(5)" Margin="4,0,4,0" Foreground="#FFF7F7F7"> <VirtualizingStackPanel x:Name="doingList"> <StackPanel x:Name="doingList"> <!-- 进行中的倒计时项 --> </VirtualizingStackPanel> </StackPanel> </Expander> <Expander RenderOptions.ClearTypeHint="Enabled" x:Name="countE" Background="#00000000" BorderBrush="{x:Null}" Header="正计时(5)" Margin="4,0,4,0" Foreground="#FFF7F7F7" IsExpanded="True"> <VirtualizingStackPanel x:Name="count"> <StackPanel x:Name="count"> <!-- 正计时项 --> </VirtualizingStackPanel> </StackPanel> </Expander> <Expander RenderOptions.ClearTypeHint="Enabled" x:Name="wcE" Background="#00000000" BorderBrush="{x:Null}" Header="已完成(5)" Margin="4,0,4,0" Foreground="#FFF7F7F7"> <VirtualizingStackPanel x:Name="wancheng"> <StackPanel x:Name="wancheng"> <!-- 已完成的倒计时项 --> </VirtualizingStackPanel> </StackPanel> </Expander> <TextBlock x:Name="Version" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#7FF7F7F7" Margin="0,48,0,0"> Count Down List V1.0 Countdown List V1.0 </TextBlock> <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#7FF7F7F7"> By shRabbit Loading @@ -164,7 +160,7 @@ <TextBlock x:Name="newVerisonTip" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="#7FF7F7F7" Margin="0,0,0,48" Visibility="Hidden"> <Hyperlink x:Name="newVerisonTipContent" Foreground="White"></Hyperlink> </TextBlock> </VirtualizingStackPanel> </StackPanel> </local:MyScrollViewer> </Grid> </Border> Loading