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 @@ - - - - + + + + - +