From 98f332dc2e53d942b253320d9d3b0816aa9e5582 Mon Sep 17 00:00:00 2001 From: BookerLiu Date: Thu, 6 Apr 2023 20:36:20 +0800 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20=E5=BC=80=E5=90=AF?= =?UTF-8?q?=E8=99=9A=E6=8B=9F=E5=8C=96=E9=98=B2=E6=AD=A2=E5=8D=A1=E9=A1=BF?= =?UTF-8?q?,=20=E5=A2=9E=E5=8A=A0=E8=87=AA=E9=80=82=E5=BA=94=E5=AE=BD?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Constant/WidthTypeEnum.cs | 2 + .../PannelCard/RightCardControl.xaml | 52 ++++++++++-------- Converts/GetWidthByWWConvert.cs | 3 + .../DraggAnimatedPanel.Drag.cs | 0 .../DraggAnimatedPanel}/DraggAnimatedPanel.cs | 0 .../VirtualizingWrapPanel}/ItemRange.cs | 2 +- .../VirtualizingWrapPanel}/ScrollDirection.cs | 2 +- .../VirtualizingWrapPanel}/SpacingMode.cs | 2 +- .../VirtualizingPanelBase.cs | 55 +++++++++++-------- .../VirtualizingWrapPanel.cs | 6 +- GeekDesk.csproj | 14 ++--- 11 files changed, 81 insertions(+), 57 deletions(-) rename {DraggAnimatedPanel => CustomComponent/DraggAnimatedPanel}/DraggAnimatedPanel.Drag.cs (100%) rename {DraggAnimatedPanel => CustomComponent/DraggAnimatedPanel}/DraggAnimatedPanel.cs (100%) rename {Util/WrpaPanel => CustomComponent/VirtualizingWrapPanel}/ItemRange.cs (90%) rename {Util/WrpaPanel => CustomComponent/VirtualizingWrapPanel}/ScrollDirection.cs (78%) rename {Util/WrpaPanel => CustomComponent/VirtualizingWrapPanel}/SpacingMode.cs (93%) rename {Util/WrpaPanel => CustomComponent/VirtualizingWrapPanel}/VirtualizingPanelBase.cs (89%) rename {Util/WrpaPanel => CustomComponent/VirtualizingWrapPanel}/VirtualizingWrapPanel.cs (99%) diff --git a/Constant/WidthTypeEnum.cs b/Constant/WidthTypeEnum.cs index 550cc78..b50130c 100644 --- a/Constant/WidthTypeEnum.cs +++ b/Constant/WidthTypeEnum.cs @@ -12,5 +12,7 @@ namespace GeekDesk.Constant RIGHT_CARD = 1, //右侧托盘宽度 RIGHT_CARD_HALF = 2, //右侧托盘宽度的一半 RIGHT_CARD_HALF_TEXT = 3, //右侧托盘宽度的一半 再减去左侧图像宽度 + RIGHT_CARD_20 = 4, //右侧托盘宽度 - 20 + RIGHT_CARD_40 = 5, //右侧托盘宽度 - 40 } } diff --git a/Control/UserControls/PannelCard/RightCardControl.xaml b/Control/UserControls/PannelCard/RightCardControl.xaml index 3bbe658..5e8bea0 100644 --- a/Control/UserControls/PannelCard/RightCardControl.xaml +++ b/Control/UserControls/PannelCard/RightCardControl.xaml @@ -8,7 +8,7 @@ xmlns:cvt="clr-namespace:GeekDesk.Converts" xmlns:cst="clr-namespace:GeekDesk.Constant" xmlns:DraggAnimatedPanel="clr-namespace:DraggAnimatedPanel" - xmlns:util="clr-namespace:GeekDesk.Util" + xmlns:component="clr-namespace:GeekDesk.CustomComponent.VirtualizingWrapPanel" xmlns:xf="clr-namespace:XamlFlair;assembly=XamlFlair.WPF" xmlns:ot="clr-namespace:GeekDesk.Control.Other" xmlns:viewmodel="clr-namespace:GeekDesk.ViewModel" d:DataContext="{d:DesignInstance Type=viewmodel:AppData}" @@ -162,18 +162,20 @@ + ItemsSource="{Binding AppConfig.SelectedMenuIcons, Mode=OneWay}" + BorderThickness="0" + Padding="0,10,0,0" + ScrollViewer.CanContentScroll ="True" + VirtualizingPanel.VirtualizationMode="Recycling" + VirtualizingPanel.IsVirtualizing="True" + VirtualizingPanel.IsContainerVirtualizable="True" + VirtualizingPanel.ScrollUnit="Pixel" + > @@ -205,10 +207,13 @@ HorizontalAlignment="Center" SwapCommand="{Binding SwapCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>--> - @@ -291,7 +296,7 @@ - + - + Padding="0,10,0,0" + x:Name="SearchListBox" + SelectionChanged="SearchListBox_SelectionChanged" + > + Items => ((ItemContainerGenerator)ItemContainerGenerator).Items; + protected ReadOnlyCollection Items => ((ItemContainerGenerator)ItemContainerGenerator).Items; protected new IRecyclingItemContainerGenerator ItemContainerGenerator { @@ -123,7 +132,7 @@ namespace GeekDesk.Util.WrpaPanel return _itemContainerGenerator; } } - private IRecyclingItemContainerGenerator? _itemContainerGenerator; + private IRecyclingItemContainerGenerator _itemContainerGenerator; public double ExtentWidth => Extent.Width; public double ExtentHeight => Extent.Height; @@ -141,6 +150,8 @@ namespace GeekDesk.Util.WrpaPanel /// The range of items that a realized in viewport or cache. /// protected ItemRange ItemRange { get; set; } + public ScrollViewer ScrollOwner { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } + public DependencyObject ItemsOwner1 { get => _itemsOwner; set => _itemsOwner = value; } private Visibility previousVerticalScrollBarVisibility = Visibility.Collapsed; private Visibility previousHorizontalScrollBarVisibility = Visibility.Collapsed; @@ -174,7 +185,7 @@ namespace GeekDesk.Util.WrpaPanel if (invalidateScrollInfo) { - ScrollOwner?.InvalidateScrollInfo(); + GetScrollOwner()?.InvalidateScrollInfo(); } } @@ -245,20 +256,20 @@ namespace GeekDesk.Util.WrpaPanel { /* Sometimes when scrolling the scrollbar gets hidden without any reason. In this case the "IsMeasureValid" * property of the ScrollOwner is false. To prevent a infinite circle the mesasure call is ignored. */ - if (ScrollOwner != null) + if (GetScrollOwner() != null) { - bool verticalScrollBarGotHidden = ScrollOwner.VerticalScrollBarVisibility == ScrollBarVisibility.Auto - && ScrollOwner.ComputedVerticalScrollBarVisibility != Visibility.Visible - && ScrollOwner.ComputedVerticalScrollBarVisibility != previousVerticalScrollBarVisibility; + bool verticalScrollBarGotHidden = GetScrollOwner().VerticalScrollBarVisibility == ScrollBarVisibility.Auto + && GetScrollOwner().ComputedVerticalScrollBarVisibility != Visibility.Visible + && GetScrollOwner().ComputedVerticalScrollBarVisibility != previousVerticalScrollBarVisibility; - bool horizontalScrollBarGotHidden = ScrollOwner.HorizontalScrollBarVisibility == ScrollBarVisibility.Auto - && ScrollOwner.ComputedHorizontalScrollBarVisibility != Visibility.Visible - && ScrollOwner.ComputedHorizontalScrollBarVisibility != previousHorizontalScrollBarVisibility; + bool horizontalScrollBarGotHidden = GetScrollOwner().HorizontalScrollBarVisibility == ScrollBarVisibility.Auto + && GetScrollOwner().ComputedHorizontalScrollBarVisibility != Visibility.Visible + && GetScrollOwner().ComputedHorizontalScrollBarVisibility != previousHorizontalScrollBarVisibility; - previousVerticalScrollBarVisibility = ScrollOwner.ComputedVerticalScrollBarVisibility; - previousHorizontalScrollBarVisibility = ScrollOwner.ComputedHorizontalScrollBarVisibility; + previousVerticalScrollBarVisibility = GetScrollOwner().ComputedVerticalScrollBarVisibility; + previousHorizontalScrollBarVisibility = GetScrollOwner().ComputedHorizontalScrollBarVisibility; - if (!ScrollOwner.IsMeasureValid && verticalScrollBarGotHidden || horizontalScrollBarGotHidden) + if (!GetScrollOwner().IsMeasureValid && verticalScrollBarGotHidden || horizontalScrollBarGotHidden) { return availableSize; } @@ -397,7 +408,7 @@ namespace GeekDesk.Util.WrpaPanel offset = Extent.Height - Viewport.Height; } Offset = new Point(Offset.X, offset); - ScrollOwner?.InvalidateScrollInfo(); + GetScrollOwner()?.InvalidateScrollInfo(); InvalidateMeasure(); } @@ -412,7 +423,7 @@ namespace GeekDesk.Util.WrpaPanel offset = Extent.Width - Viewport.Width; } Offset = new Point(offset, Offset.Y); - ScrollOwner?.InvalidateScrollInfo(); + GetScrollOwner()?.InvalidateScrollInfo(); InvalidateMeasure(); } diff --git a/Util/WrpaPanel/VirtualizingWrapPanel.cs b/CustomComponent/VirtualizingWrapPanel/VirtualizingWrapPanel.cs similarity index 99% rename from Util/WrpaPanel/VirtualizingWrapPanel.cs rename to CustomComponent/VirtualizingWrapPanel/VirtualizingWrapPanel.cs index a7e26ca..85cd9c8 100644 --- a/Util/WrpaPanel/VirtualizingWrapPanel.cs +++ b/CustomComponent/VirtualizingWrapPanel/VirtualizingWrapPanel.cs @@ -11,9 +11,9 @@ using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Windows; -using GeekDesk.Util.WrpaPanel; +using GeekDesk.CustomComponent.VirtualizingWrapPanel; -namespace GeekDesk.Util.WrpaPanel +namespace GeekDesk.CustomComponent.VirtualizingWrapPanel { public class VirtualizingWrapPanel : VirtualizingPanelBase { @@ -272,7 +272,7 @@ namespace GeekDesk.Util.WrpaPanel } } - private T ReadItemContainerStyle(DependencyProperty property, T fallbackValue) where T : notnull + private T ReadItemContainerStyle(DependencyProperty property, T fallbackValue) { var value = ItemsControl.ItemContainerStyle?.Setters.OfType() .FirstOrDefault(setter => setter.Property == property)?.Value; diff --git a/GeekDesk.csproj b/GeekDesk.csproj index 73fde1b..1c671d0 100644 --- a/GeekDesk.csproj +++ b/GeekDesk.csproj @@ -270,8 +270,8 @@ - - + + @@ -324,13 +324,13 @@ - - - - + + + + - +