♻️ 优化滚动条动画 :boom:增加触底切换菜单
This commit is contained in:
@@ -40,5 +40,23 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static bool IS_MENU_EDIT = false;
|
public static bool IS_MENU_EDIT = false;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 图标card 鼠标滚轮是否正在工作
|
||||||
|
/// 用来控制popup的显示 否则低性能机器会造成卡顿
|
||||||
|
/// </summary>
|
||||||
|
public static bool ICONLIST_MOUSE_WHEEL = false;
|
||||||
|
/// <summary>
|
||||||
|
/// 控制多少毫秒后 关闭(ICONLIST_MOUSE_WHEEL)鼠标滚轮运行状态
|
||||||
|
/// </summary>
|
||||||
|
public static int MOUSE_WHEEL_WAIT_MS = 100;
|
||||||
|
/// <summary>
|
||||||
|
/// 与关闭popup 配合使用, 避免线程结束后不显示popup
|
||||||
|
/// </summary>
|
||||||
|
public static bool MOUSE_ENTER_ICON = false;
|
||||||
|
/// <summary>
|
||||||
|
/// 控制每次刷新搜索结果 鼠标移动后显示popup
|
||||||
|
/// </summary>
|
||||||
|
public static int MOUSE_MOVE_COUNT = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
15
Constant/WidthTypeEnum.cs
Normal file
15
Constant/WidthTypeEnum.cs
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace GeekDesk.Constant
|
||||||
|
{
|
||||||
|
public enum WidthTypeEnum
|
||||||
|
{
|
||||||
|
LEFT_CARD = 0, //左侧托盘宽度
|
||||||
|
RIGHT_CARD = 1, //右侧托盘宽度
|
||||||
|
RIGHT_CARD_HALF = 2 //右侧托盘宽度的一半
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -333,7 +333,6 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|||||||
appData.AppConfig.SelectedMenuIcons = null;
|
appData.AppConfig.SelectedMenuIcons = null;
|
||||||
RunTimeStatus.SHOW_MENU_PASSWORDBOX = true;
|
RunTimeStatus.SHOW_MENU_PASSWORDBOX = true;
|
||||||
MainWindow.mainWindow.RightCard.PDDialog.Title.Text = "输入密码";
|
MainWindow.mainWindow.RightCard.PDDialog.Title.Text = "输入密码";
|
||||||
MainWindow.mainWindow.RightCard.PDDialog.type = PasswordType.INPUT;
|
|
||||||
MainWindow.mainWindow.RightCard.PDDialog.Visibility = Visibility.Visible;
|
MainWindow.mainWindow.RightCard.PDDialog.Visibility = Visibility.Visible;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -426,18 +425,27 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|||||||
private void Menu_MouseWheel(object sender, MouseWheelEventArgs e)
|
private void Menu_MouseWheel(object sender, MouseWheelEventArgs e)
|
||||||
{
|
{
|
||||||
if (RunTimeStatus.IS_MENU_EDIT) return;
|
if (RunTimeStatus.IS_MENU_EDIT) return;
|
||||||
|
|
||||||
|
ScrollViewer scrollViewer = ScrollUtil.FindSimpleVisualChild<ScrollViewer>(MenuListBox);
|
||||||
if (e.Delta < 0)
|
if (e.Delta < 0)
|
||||||
|
{
|
||||||
|
//判断是否到了最底部
|
||||||
|
if (ScrollUtil.IsBootomScrollView(scrollViewer))
|
||||||
{
|
{
|
||||||
int index = MenuListBox.SelectedIndex;
|
int index = MenuListBox.SelectedIndex;
|
||||||
if (index < MenuListBox.Items.Count - 1)
|
if (index < MenuListBox.Items.Count - 1)
|
||||||
{
|
{
|
||||||
index++;
|
index++;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
index = 0;
|
index = 0;
|
||||||
}
|
}
|
||||||
MenuListBox.SelectedIndex = index;
|
MenuListBox.SelectedIndex = index;
|
||||||
|
}
|
||||||
} else if (e.Delta > 0)
|
} else if (e.Delta > 0)
|
||||||
|
{
|
||||||
|
if (ScrollUtil.IsTopScrollView(scrollViewer))
|
||||||
{
|
{
|
||||||
int index = MenuListBox.SelectedIndex;
|
int index = MenuListBox.SelectedIndex;
|
||||||
if (index > 0)
|
if (index > 0)
|
||||||
@@ -452,6 +460,11 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//滚动到选中项
|
||||||
|
MenuListBox.ScrollIntoView(MenuListBox.SelectedItem);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void Menu_PreviewDragLeave(object sender, DragEventArgs e)
|
private void Menu_PreviewDragLeave(object sender, DragEventArgs e)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,9 +6,11 @@
|
|||||||
xmlns:temp="clr-namespace:GeekDesk.ViewModel.Temp"
|
xmlns:temp="clr-namespace:GeekDesk.ViewModel.Temp"
|
||||||
xmlns:hc="https://handyorg.github.io/handycontrol"
|
xmlns:hc="https://handyorg.github.io/handycontrol"
|
||||||
xmlns:cvt="clr-namespace:GeekDesk.Converts"
|
xmlns:cvt="clr-namespace:GeekDesk.Converts"
|
||||||
|
xmlns:cst="clr-namespace:GeekDesk.Constant"
|
||||||
xmlns:DraggAnimatedPanel="clr-namespace:DraggAnimatedPanel"
|
xmlns:DraggAnimatedPanel="clr-namespace:DraggAnimatedPanel"
|
||||||
xmlns:xf="clr-namespace:XamlFlair;assembly=XamlFlair.WPF"
|
xmlns:xf="clr-namespace:XamlFlair;assembly=XamlFlair.WPF"
|
||||||
xmlns:ot="clr-namespace:GeekDesk.Control.Other"
|
xmlns:ot="clr-namespace:GeekDesk.Control.Other"
|
||||||
|
xmlns:viewmodel="clr-namespace:GeekDesk.ViewModel" d:DataContext="{d:DesignInstance Type=viewmodel:AppData}"
|
||||||
mc:Ignorable="d"
|
mc:Ignorable="d"
|
||||||
d:DesignHeight="450" d:DesignWidth="800"
|
d:DesignHeight="450" d:DesignWidth="800"
|
||||||
>
|
>
|
||||||
@@ -58,6 +60,25 @@
|
|||||||
</Setter>
|
</Setter>
|
||||||
</Style>
|
</Style>
|
||||||
|
|
||||||
|
<Style x:Key="MyPoptipStyle" TargetType="Border">
|
||||||
|
<Setter Property="HorizontalAlignment" Value="Center"/>
|
||||||
|
<Setter Property="VerticalAlignment" Value="Center"/>
|
||||||
|
<Setter Property="BorderThickness" Value="1"/>
|
||||||
|
<Setter Property="Background" Value="White"/>
|
||||||
|
<Setter Property="BorderBrush" Value="{DynamicResource BorderBrush}"/>
|
||||||
|
<Setter Property="CornerRadius" Value="{StaticResource DefaultCornerRadius}"/>
|
||||||
|
<Setter Property="Padding" Value="{StaticResource DefaultControlPadding}"/>
|
||||||
|
<!--<Setter Property="Template">
|
||||||
|
<Setter.Value>
|
||||||
|
<ControlTemplate TargetType="hc:Poptip">
|
||||||
|
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" CornerRadius="{Binding Path=(hc:BorderElement.CornerRadius),RelativeSource={RelativeSource TemplatedParent}}">
|
||||||
|
<ContentPresenter Margin="{TemplateBinding Padding}" ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}" ContentStringFormat="{TemplateBinding ContentStringFormat}" ContentTemplate="{TemplateBinding ContentTemplate}"/>
|
||||||
|
</Border>
|
||||||
|
</ControlTemplate>
|
||||||
|
</Setter.Value>
|
||||||
|
</Setter>-->
|
||||||
|
</Style>
|
||||||
|
|
||||||
<Storyboard x:Key="Custom1Transition1" x:Shared="False">
|
<Storyboard x:Key="Custom1Transition1" x:Shared="False">
|
||||||
<DoubleAnimation From="50" To="0" Duration="0:0:0.4" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
|
<DoubleAnimation From="50" To="0" Duration="0:0:0.4" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
|
||||||
<DoubleAnimation.EasingFunction>
|
<DoubleAnimation.EasingFunction>
|
||||||
@@ -82,11 +103,23 @@
|
|||||||
</Storyboard>
|
</Storyboard>
|
||||||
|
|
||||||
<cvt:OpcityConvert x:Key="OpcityConvert"/>
|
<cvt:OpcityConvert x:Key="OpcityConvert"/>
|
||||||
<cvt:SearchResWidth x:Key="SearchResWidth"/>
|
<cvt:GetWidthByWWConvert x:Key="GetWidthByWWConvert"/>
|
||||||
<temp:SearchIconList x:Key="SearchIconList"/>
|
<temp:SearchIconList x:Key="SearchIconList"/>
|
||||||
</UserControl.Resources>
|
</UserControl.Resources>
|
||||||
<!--右侧栏-->
|
<!--右侧栏-->
|
||||||
<Grid>
|
<Grid>
|
||||||
|
<Popup Name="MyPoptip" FlowDirection="LeftToRight"
|
||||||
|
PopupAnimation="None" Placement="Mouse"
|
||||||
|
IsOpen="False"
|
||||||
|
AllowsTransparency="True"
|
||||||
|
>
|
||||||
|
<Grid Background="Transparent">
|
||||||
|
<Border Style="{StaticResource MyPoptipStyle}">
|
||||||
|
<TextBlock Name="MyPoptipContent" HorizontalAlignment="Center" VerticalAlignment="Center" TextAlignment="Left" Text="Test" FontSize="13"/>
|
||||||
|
</Border>
|
||||||
|
</Grid>
|
||||||
|
</Popup>
|
||||||
|
|
||||||
<hc:Card AllowDrop="True"
|
<hc:Card AllowDrop="True"
|
||||||
x:Name="WrapCard"
|
x:Name="WrapCard"
|
||||||
Visibility="Visible"
|
Visibility="Visible"
|
||||||
@@ -96,6 +129,7 @@
|
|||||||
Margin="5,0,5,5" Grid.ColumnSpan="2"
|
Margin="5,0,5,5" Grid.ColumnSpan="2"
|
||||||
PreviewMouseRightButtonDown="WrapCard_PreviewMouseRightButtonDown"
|
PreviewMouseRightButtonDown="WrapCard_PreviewMouseRightButtonDown"
|
||||||
hc:Dialog.Token="RightWrapCardDialog"
|
hc:Dialog.Token="RightWrapCardDialog"
|
||||||
|
MouseWheel="IconListBox_MouseWheel"
|
||||||
>
|
>
|
||||||
<hc:Card.Background>
|
<hc:Card.Background>
|
||||||
<SolidColorBrush Color="AliceBlue" hc:GeometryEffect.GeometryEffect="20" Opacity="{Binding AppConfig.CardOpacity, Mode=TwoWay, Converter={StaticResource OpcityConvert}}"/>
|
<SolidColorBrush Color="AliceBlue" hc:GeometryEffect.GeometryEffect="20" Opacity="{Binding AppConfig.CardOpacity, Mode=TwoWay, Converter={StaticResource OpcityConvert}}"/>
|
||||||
@@ -118,6 +152,7 @@
|
|||||||
IsVisibleChanged="PDDialog_IsVisibleChanged"
|
IsVisibleChanged="PDDialog_IsVisibleChanged"
|
||||||
Margin="0,-100,0,0"/>
|
Margin="0,-100,0,0"/>
|
||||||
<StackPanel Panel.ZIndex="1" Margin="0,-10,-0,0"/>
|
<StackPanel Panel.ZIndex="1" Margin="0,-10,-0,0"/>
|
||||||
|
|
||||||
<WrapPanel Orientation="Horizontal"
|
<WrapPanel Orientation="Horizontal"
|
||||||
VirtualizingPanel.VirtualizationMode="Recycling"
|
VirtualizingPanel.VirtualizationMode="Recycling"
|
||||||
VirtualizingPanel.IsVirtualizing="True"
|
VirtualizingPanel.IsVirtualizing="True"
|
||||||
@@ -129,9 +164,27 @@
|
|||||||
ItemsSource="{Binding AppConfig.SelectedMenuIcons, Mode=OneWay}"
|
ItemsSource="{Binding AppConfig.SelectedMenuIcons, Mode=OneWay}"
|
||||||
BorderThickness="0"
|
BorderThickness="0"
|
||||||
Padding="0,10,0,0"
|
Padding="0,10,0,0"
|
||||||
|
ScrollViewer.CanContentScroll ="False"
|
||||||
>
|
>
|
||||||
|
<ListBox.Template>
|
||||||
|
<ControlTemplate TargetType="ListBox">
|
||||||
|
<hc:ScrollViewer x:Name="WrapScroll"
|
||||||
|
Orientation="Vertical"
|
||||||
|
HorizontalScrollBarVisibility="Hidden"
|
||||||
|
VerticalScrollBarVisibility="Auto"
|
||||||
|
IsInertiaEnabled="True"
|
||||||
|
CanContentScroll="True"
|
||||||
|
PreviewMouseWheel="IconListBox_MouseWheel"
|
||||||
|
>
|
||||||
|
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderBrush}">
|
||||||
|
<ItemsPresenter/>
|
||||||
|
|
||||||
|
</Border>
|
||||||
|
</hc:ScrollViewer>
|
||||||
|
</ControlTemplate>
|
||||||
|
</ListBox.Template>
|
||||||
<ListBox.Background>
|
<ListBox.Background>
|
||||||
<SolidColorBrush Opacity="0"/>
|
<SolidColorBrush Color="#00FFFFFF" />
|
||||||
</ListBox.Background>
|
</ListBox.Background>
|
||||||
<ListBox.ItemsPanel>
|
<ListBox.ItemsPanel>
|
||||||
<ItemsPanelTemplate>
|
<ItemsPanelTemplate>
|
||||||
@@ -140,7 +193,12 @@
|
|||||||
ItemsHeight="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelHeight, Mode=OneWay}"
|
ItemsHeight="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelHeight, Mode=OneWay}"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
SwapCommand="{Binding SwapCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>-->
|
SwapCommand="{Binding SwapCommand, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"/>-->
|
||||||
<WrapPanel />
|
|
||||||
|
<WrapPanel Background="#00FFFFFF"
|
||||||
|
Width="{Binding AppConfig.WindowWidth, Mode=OneWay,
|
||||||
|
Converter={StaticResource GetWidthByWWConvert},
|
||||||
|
ConverterParameter={x:Static cst:WidthTypeEnum.RIGHT_CARD}}"
|
||||||
|
/>
|
||||||
</ItemsPanelTemplate>
|
</ItemsPanelTemplate>
|
||||||
</ListBox.ItemsPanel>
|
</ListBox.ItemsPanel>
|
||||||
|
|
||||||
@@ -169,11 +227,10 @@
|
|||||||
Height="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelHeight, Mode=OneWay}"
|
Height="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelHeight, Mode=OneWay}"
|
||||||
Width="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelWidth, Mode=OneWay}"
|
Width="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImgPanelWidth, Mode=OneWay}"
|
||||||
HorizontalAlignment="Center"
|
HorizontalAlignment="Center"
|
||||||
hc:Poptip.Content="{Binding Content}"
|
|
||||||
hc:Poptip.Placement="BottomLeft"
|
|
||||||
Background="#00FFFFFF"
|
Background="#00FFFFFF"
|
||||||
MouseEnter="StackPanel_MouseEnter"
|
MouseEnter="MenuIcon_MouseEnter"
|
||||||
MouseLeave="StackPanel_MouseLeave"
|
MouseLeave="MenuIcon_MouseLeave"
|
||||||
|
MouseMove="MenuIcon_MouseMove"
|
||||||
MouseLeftButtonDown="Icon_MouseLeftButtonDown"
|
MouseLeftButtonDown="Icon_MouseLeftButtonDown"
|
||||||
MouseLeftButtonUp="Icon_MouseLeftButtonUp"
|
MouseLeftButtonUp="Icon_MouseLeftButtonUp"
|
||||||
>
|
>
|
||||||
@@ -202,6 +259,7 @@
|
|||||||
<!--</hc:TransitioningContentControl>-->
|
<!--</hc:TransitioningContentControl>-->
|
||||||
</UniformGrid>
|
</UniformGrid>
|
||||||
</WrapPanel>
|
</WrapPanel>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
</hc:DialogContainer>
|
</hc:DialogContainer>
|
||||||
</hc:Card>
|
</hc:Card>
|
||||||
@@ -234,6 +292,22 @@
|
|||||||
x:Name="SearchListBox"
|
x:Name="SearchListBox"
|
||||||
SelectionChanged="SearchListBox_SelectionChanged"
|
SelectionChanged="SearchListBox_SelectionChanged"
|
||||||
>
|
>
|
||||||
|
<ListBox.Template>
|
||||||
|
<ControlTemplate TargetType="ListBox">
|
||||||
|
<hc:ScrollViewer Orientation="Vertical"
|
||||||
|
HorizontalScrollBarVisibility="Hidden"
|
||||||
|
VerticalScrollBarVisibility="Auto"
|
||||||
|
IsInertiaEnabled="True"
|
||||||
|
CanContentScroll="True"
|
||||||
|
PreviewMouseWheel="VerticalIconList_PreviewMouseWheel"
|
||||||
|
>
|
||||||
|
<Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderBrush}">
|
||||||
|
<ItemsPresenter/>
|
||||||
|
</Border>
|
||||||
|
</hc:ScrollViewer>
|
||||||
|
</ControlTemplate>
|
||||||
|
</ListBox.Template>
|
||||||
|
|
||||||
<ListBox.Background>
|
<ListBox.Background>
|
||||||
<SolidColorBrush Opacity="0"/>
|
<SolidColorBrush Opacity="0"/>
|
||||||
</ListBox.Background>
|
</ListBox.Background>
|
||||||
@@ -258,7 +332,9 @@
|
|||||||
<ListBox.ItemsPanel>
|
<ListBox.ItemsPanel>
|
||||||
<ItemsPanelTemplate>
|
<ItemsPanelTemplate>
|
||||||
<StackPanel Background="#00FFFFFF"
|
<StackPanel Background="#00FFFFFF"
|
||||||
Width="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.MenuCardWidth, Mode=OneWay, Converter={StaticResource SearchResWidth}, ConverterParameter=1}"
|
Width="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.WindowWidth, Mode=OneWay,
|
||||||
|
Converter={StaticResource GetWidthByWWConvert},
|
||||||
|
ConverterParameter={x:Static cst:WidthTypeEnum.RIGHT_CARD}}"
|
||||||
/>
|
/>
|
||||||
</ItemsPanelTemplate>
|
</ItemsPanelTemplate>
|
||||||
</ListBox.ItemsPanel>
|
</ListBox.ItemsPanel>
|
||||||
@@ -283,16 +359,19 @@
|
|||||||
</Border.Style>
|
</Border.Style>
|
||||||
<WrapPanel Tag="{Binding}"
|
<WrapPanel Tag="{Binding}"
|
||||||
Height="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImageHeight, Mode=OneWay}"
|
Height="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.ImageHeight, Mode=OneWay}"
|
||||||
Width="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.MenuCardWidth, Mode=OneWay, Converter={StaticResource SearchResWidth}, ConverterParameter=2}"
|
Width="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Window}},Path=DataContext.AppConfig.WindowWidth, Mode=OneWay,
|
||||||
|
Converter={StaticResource GetWidthByWWConvert},
|
||||||
|
ConverterParameter={x:Static cst:WidthTypeEnum.RIGHT_CARD_HALF}}"
|
||||||
HorizontalAlignment="Left"
|
HorizontalAlignment="Left"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
hc:Poptip.HitMode="None"
|
hc:Poptip.HitMode="None"
|
||||||
hc:Poptip.IsOpen="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}"
|
|
||||||
hc:Poptip.Content="{Binding Content}"
|
|
||||||
hc:Poptip.Placement="BottomLeft"
|
hc:Poptip.Placement="BottomLeft"
|
||||||
Background="#00FFFFFF"
|
Background="#00FFFFFF"
|
||||||
|
MouseEnter="SearchIcon_MouseEnter"
|
||||||
|
MouseLeave="SearchIcon_MouseLeave"
|
||||||
MouseLeftButtonDown="Icon_MouseLeftButtonDown"
|
MouseLeftButtonDown="Icon_MouseLeftButtonDown"
|
||||||
MouseLeftButtonUp="Icon_MouseLeftButtonUp"
|
MouseLeftButtonUp="Icon_MouseLeftButtonUp"
|
||||||
|
MouseMove="SearchIcon_MouseMove"
|
||||||
Margin="25,10,0,10"
|
Margin="25,10,0,10"
|
||||||
>
|
>
|
||||||
<Image Style="{StaticResource ImageStyle}" RenderOptions.BitmapScalingMode="HighQuality"/>
|
<Image Style="{StaticResource ImageStyle}" RenderOptions.BitmapScalingMode="HighQuality"/>
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ using System;
|
|||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.Reflection;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Windows;
|
using System.Windows;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
@@ -453,8 +454,28 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StackPanel_MouseEnter(object sender, MouseEventArgs e)
|
private void MenuIcon_MouseEnter(object sender, MouseEventArgs e)
|
||||||
{
|
{
|
||||||
|
RunTimeStatus.MOUSE_ENTER_ICON = true;
|
||||||
|
if (!RunTimeStatus.ICONLIST_MOUSE_WHEEL)
|
||||||
|
{
|
||||||
|
new Thread(() =>
|
||||||
|
{
|
||||||
|
this.Dispatcher.BeginInvoke(new Action(() =>
|
||||||
|
{
|
||||||
|
IconInfo info = (sender as Panel).Tag as IconInfo;
|
||||||
|
MyPoptipContent.Text = info.Content;
|
||||||
|
MyPoptip.VerticalOffset = 30;
|
||||||
|
Thread.Sleep(100);
|
||||||
|
if (!RunTimeStatus.ICONLIST_MOUSE_WHEEL)
|
||||||
|
{
|
||||||
|
MyPoptip.IsOpen = true;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}).Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
double width = appData.AppConfig.ImageWidth;
|
double width = appData.AppConfig.ImageWidth;
|
||||||
double height = appData.AppConfig.ImageHeight;
|
double height = appData.AppConfig.ImageHeight;
|
||||||
@@ -469,12 +490,12 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|||||||
});
|
});
|
||||||
t.IsBackground = true;
|
t.IsBackground = true;
|
||||||
t.Start();
|
t.Start();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void StackPanel_MouseLeave(object sender, MouseEventArgs e)
|
private void MenuIcon_MouseLeave(object sender, MouseEventArgs e)
|
||||||
{
|
{
|
||||||
|
RunTimeStatus.MOUSE_ENTER_ICON = false;
|
||||||
|
MyPoptip.IsOpen = false;
|
||||||
Thread t = new Thread(() =>
|
Thread t = new Thread(() =>
|
||||||
{
|
{
|
||||||
this.Dispatcher.BeginInvoke(new Action(() =>
|
this.Dispatcher.BeginInvoke(new Action(() =>
|
||||||
@@ -484,7 +505,6 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|||||||
});
|
});
|
||||||
t.IsBackground = true;
|
t.IsBackground = true;
|
||||||
t.Start();
|
t.Start();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -758,6 +778,10 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|||||||
|
|
||||||
public void SearchListBoxIndexAdd()
|
public void SearchListBoxIndexAdd()
|
||||||
{
|
{
|
||||||
|
//控制移动后 鼠标即使在图标上也不显示popup
|
||||||
|
RunTimeStatus.MOUSE_MOVE_COUNT = 0;
|
||||||
|
MyPoptip.IsOpen = false;
|
||||||
|
|
||||||
if (SearchListBox.Items.Count > 0)
|
if (SearchListBox.Items.Count > 0)
|
||||||
{
|
{
|
||||||
if (SearchListBox.SelectedIndex < SearchListBox.Items.Count - 1)
|
if (SearchListBox.SelectedIndex < SearchListBox.Items.Count - 1)
|
||||||
@@ -769,6 +793,10 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|||||||
|
|
||||||
public void SearchListBoxIndexSub()
|
public void SearchListBoxIndexSub()
|
||||||
{
|
{
|
||||||
|
//控制移动后 鼠标即使在图标上也不显示popup
|
||||||
|
RunTimeStatus.MOUSE_MOVE_COUNT = 0;
|
||||||
|
MyPoptip.IsOpen = false;
|
||||||
|
|
||||||
if (SearchListBox.Items.Count > 0)
|
if (SearchListBox.Items.Count > 0)
|
||||||
{
|
{
|
||||||
if (SearchListBox.SelectedIndex > 0)
|
if (SearchListBox.SelectedIndex > 0)
|
||||||
@@ -818,5 +846,205 @@ namespace GeekDesk.Control.UserControls.PannelCard
|
|||||||
MainWindow.mainWindow.Focus();
|
MainWindow.mainWindow.Focus();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 菜单结果icon 列表鼠标滚轮预处理时间
|
||||||
|
/// 主要使用自定义popup解决卡顿问题解决卡顿问题
|
||||||
|
/// 以及滚动条收尾切换菜单
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void IconListBox_MouseWheel(object sender, MouseWheelEventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
//控制在滚动时不显示popup 否则会在低GPU性能机器上造成卡顿
|
||||||
|
MyPoptip.IsOpen = false;
|
||||||
|
if (RunTimeStatus.ICONLIST_MOUSE_WHEEL)
|
||||||
|
{
|
||||||
|
RunTimeStatus.MOUSE_WHEEL_WAIT_MS = 500;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
RunTimeStatus.ICONLIST_MOUSE_WHEEL = true;
|
||||||
|
|
||||||
|
new Thread(() =>
|
||||||
|
{
|
||||||
|
while (RunTimeStatus.MOUSE_WHEEL_WAIT_MS > 0)
|
||||||
|
{
|
||||||
|
Thread.Sleep(1);
|
||||||
|
RunTimeStatus.MOUSE_WHEEL_WAIT_MS -= 1;
|
||||||
|
}
|
||||||
|
if (RunTimeStatus.MOUSE_ENTER_ICON)
|
||||||
|
{
|
||||||
|
this.Dispatcher.BeginInvoke(new Action(() =>
|
||||||
|
{
|
||||||
|
MyPoptip.IsOpen = true;
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
RunTimeStatus.MOUSE_WHEEL_WAIT_MS = 100;
|
||||||
|
RunTimeStatus.ICONLIST_MOUSE_WHEEL = false;
|
||||||
|
}).Start();
|
||||||
|
}
|
||||||
|
|
||||||
|
//修改菜单时不切换菜单
|
||||||
|
if (RunTimeStatus.IS_MENU_EDIT) return;
|
||||||
|
|
||||||
|
|
||||||
|
//切换菜单
|
||||||
|
System.Windows.Controls.ScrollViewer scrollViewer = sender as System.Windows.Controls.ScrollViewer;
|
||||||
|
if (scrollViewer == null)
|
||||||
|
{
|
||||||
|
//在card 上获取的事件
|
||||||
|
scrollViewer = ScrollUtil.FindSimpleVisualChild<System.Windows.Controls.ScrollViewer>(IconListBox);
|
||||||
|
}
|
||||||
|
if (e.Delta < 0)
|
||||||
|
{
|
||||||
|
int index = MainWindow.mainWindow.LeftCard.MenuListBox.SelectedIndex;
|
||||||
|
if (ScrollUtil.IsBootomScrollView(scrollViewer))
|
||||||
|
{
|
||||||
|
if (index < MainWindow.mainWindow.LeftCard.MenuListBox.Items.Count - 1)
|
||||||
|
{
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index = 0;
|
||||||
|
}
|
||||||
|
Console.WriteLine("进入");
|
||||||
|
MainWindow.mainWindow.LeftCard.MenuListBox.SelectedIndex = index;
|
||||||
|
scrollViewer.ScrollToVerticalOffset(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (e.Delta > 0)
|
||||||
|
{
|
||||||
|
if (ScrollUtil.IsTopScrollView(scrollViewer))
|
||||||
|
{
|
||||||
|
int index = MainWindow.mainWindow.LeftCard.MenuListBox.SelectedIndex;
|
||||||
|
if (index > 0)
|
||||||
|
{
|
||||||
|
index--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
index = MainWindow.mainWindow.LeftCard.MenuListBox.Items.Count - 1;
|
||||||
|
}
|
||||||
|
MainWindow.mainWindow.LeftCard.MenuListBox.SelectedIndex = index;
|
||||||
|
scrollViewer.ScrollToVerticalOffset(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 搜索结果icon 列表鼠标滚轮预处理时间
|
||||||
|
/// 主要使用自定义popup解决卡顿问题解决卡顿问题
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void VerticalIconList_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
|
||||||
|
{
|
||||||
|
//控制在滚动时不显示popup 否则会在低GPU性能机器上造成卡顿
|
||||||
|
MyPoptip.IsOpen = false;
|
||||||
|
if (RunTimeStatus.ICONLIST_MOUSE_WHEEL)
|
||||||
|
{
|
||||||
|
RunTimeStatus.MOUSE_WHEEL_WAIT_MS = 500;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RunTimeStatus.ICONLIST_MOUSE_WHEEL = true;
|
||||||
|
|
||||||
|
new Thread(() =>
|
||||||
|
{
|
||||||
|
while (RunTimeStatus.MOUSE_WHEEL_WAIT_MS > 0)
|
||||||
|
{
|
||||||
|
Thread.Sleep(1);
|
||||||
|
RunTimeStatus.MOUSE_WHEEL_WAIT_MS -= 1;
|
||||||
|
}
|
||||||
|
if (RunTimeStatus.MOUSE_ENTER_ICON)
|
||||||
|
{
|
||||||
|
this.Dispatcher.BeginInvoke(new Action(() =>
|
||||||
|
{
|
||||||
|
MyPoptip.IsOpen = true;
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
RunTimeStatus.MOUSE_WHEEL_WAIT_MS = 100;
|
||||||
|
RunTimeStatus.ICONLIST_MOUSE_WHEEL = false;
|
||||||
|
}).Start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询结果 ICON 鼠标进入事件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void SearchIcon_MouseEnter(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
|
||||||
|
//显示popup
|
||||||
|
RunTimeStatus.MOUSE_ENTER_ICON = true;
|
||||||
|
if (!RunTimeStatus.ICONLIST_MOUSE_WHEEL)
|
||||||
|
{
|
||||||
|
new Thread(() =>
|
||||||
|
{
|
||||||
|
this.Dispatcher.BeginInvoke(new Action(() =>
|
||||||
|
{
|
||||||
|
IconInfo info = (sender as Panel).Tag as IconInfo;
|
||||||
|
MyPoptipContent.Text = info.Content;
|
||||||
|
MyPoptip.VerticalOffset = 30;
|
||||||
|
Thread.Sleep(100);
|
||||||
|
if (!RunTimeStatus.ICONLIST_MOUSE_WHEEL && RunTimeStatus.MOUSE_MOVE_COUNT > 1)
|
||||||
|
{
|
||||||
|
MyPoptip.IsOpen = true;
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
}).Start();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询结果ICON鼠标离开事件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void SearchIcon_MouseLeave(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
RunTimeStatus.MOUSE_ENTER_ICON = false;
|
||||||
|
MyPoptip.IsOpen = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 查询结果ICON鼠标移动事件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void SearchIcon_MouseMove(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
//控制首次刷新搜索结果后, 鼠标首次移动后显示popup
|
||||||
|
RunTimeStatus.MOUSE_MOVE_COUNT++;
|
||||||
|
|
||||||
|
//防止移动后不刷新popup content
|
||||||
|
IconInfo info = (sender as Panel).Tag as IconInfo;
|
||||||
|
MyPoptipContent.Text = info.Content;
|
||||||
|
MyPoptip.VerticalOffset = 30;
|
||||||
|
|
||||||
|
if (RunTimeStatus.MOUSE_MOVE_COUNT > 1 && !RunTimeStatus.ICONLIST_MOUSE_WHEEL)
|
||||||
|
{
|
||||||
|
MyPoptip.IsOpen = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// menu结果ICON鼠标移动事件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender"></param>
|
||||||
|
/// <param name="e"></param>
|
||||||
|
private void MenuIcon_MouseMove(object sender, MouseEventArgs e)
|
||||||
|
{
|
||||||
|
//防止移动后不刷新popup content
|
||||||
|
IconInfo info = (sender as Panel).Tag as IconInfo;
|
||||||
|
MyPoptipContent.Text = info.Content;
|
||||||
|
MyPoptip.VerticalOffset = 30;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
40
Converts/GetWidthByWWConvert.cs
Normal file
40
Converts/GetWidthByWWConvert.cs
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
using GeekDesk.Constant;
|
||||||
|
using GeekDesk.ViewModel;
|
||||||
|
using System;
|
||||||
|
using System.Globalization;
|
||||||
|
using System.Windows.Data;
|
||||||
|
|
||||||
|
namespace GeekDesk.Converts
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 根据主窗口width 和传入类型 获取其它宽度
|
||||||
|
/// </summary>
|
||||||
|
class GetWidthByWWConvert : IValueConverter
|
||||||
|
{
|
||||||
|
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
|
{
|
||||||
|
WidthTypeEnum type = (WidthTypeEnum)parameter;
|
||||||
|
|
||||||
|
AppConfig config = MainWindow.appData.AppConfig;
|
||||||
|
|
||||||
|
if (WidthTypeEnum.LEFT_CARD == type)
|
||||||
|
{
|
||||||
|
return config.MenuCardWidth;
|
||||||
|
}
|
||||||
|
else if (WidthTypeEnum.RIGHT_CARD == type)
|
||||||
|
{
|
||||||
|
return config.WindowWidth - config.MenuCardWidth;
|
||||||
|
} else if (WidthTypeEnum.RIGHT_CARD_HALF == type)
|
||||||
|
{
|
||||||
|
return (config.WindowWidth - config.MenuCardWidth) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
return config.WindowWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Globalization;
|
|
||||||
using System.Windows.Data;
|
|
||||||
|
|
||||||
namespace GeekDesk.Converts
|
|
||||||
{
|
|
||||||
class SearchResWidth : IValueConverter
|
|
||||||
{
|
|
||||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
|
||||||
{
|
|
||||||
string param = parameter as string;
|
|
||||||
if ("1".Equals(param))
|
|
||||||
{
|
|
||||||
double menuLeftWidth = double.Parse(value.ToString());
|
|
||||||
return MainWindow.mainWindow.Width - menuLeftWidth;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
double menuLeftWidth = double.Parse(value.ToString());
|
|
||||||
return (MainWindow.mainWindow.Width - menuLeftWidth) / 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -172,6 +172,7 @@
|
|||||||
<Compile Include="Constant\TodoTaskExecType.cs" />
|
<Compile Include="Constant\TodoTaskExecType.cs" />
|
||||||
<Compile Include="Constant\BGStyle.cs" />
|
<Compile Include="Constant\BGStyle.cs" />
|
||||||
<Compile Include="Constant\UpdateType.cs" />
|
<Compile Include="Constant\UpdateType.cs" />
|
||||||
|
<Compile Include="Constant\WidthTypeEnum.cs" />
|
||||||
<Compile Include="Control\Other\GlobalMsgNotification.xaml.cs">
|
<Compile Include="Control\Other\GlobalMsgNotification.xaml.cs">
|
||||||
<DependentUpon>GlobalMsgNotification.xaml</DependentUpon>
|
<DependentUpon>GlobalMsgNotification.xaml</DependentUpon>
|
||||||
</Compile>
|
</Compile>
|
||||||
@@ -253,7 +254,7 @@
|
|||||||
<Compile Include="Converts\StringAppendConvert.cs" />
|
<Compile Include="Converts\StringAppendConvert.cs" />
|
||||||
<Compile Include="Converts\DoubleToGridLength.cs" />
|
<Compile Include="Converts\DoubleToGridLength.cs" />
|
||||||
<Compile Include="Converts\MenuInfoConvert.cs" />
|
<Compile Include="Converts\MenuInfoConvert.cs" />
|
||||||
<Compile Include="Converts\SearchResWidth.cs" />
|
<Compile Include="Converts\GetWidthByWWConvert.cs" />
|
||||||
<Compile Include="Converts\SortTypeConvert.cs" />
|
<Compile Include="Converts\SortTypeConvert.cs" />
|
||||||
<Compile Include="Converts\TodoTaskExecConvert.cs" />
|
<Compile Include="Converts\TodoTaskExecConvert.cs" />
|
||||||
<Compile Include="Converts\IntToCornerRadius.cs" />
|
<Compile Include="Converts\IntToCornerRadius.cs" />
|
||||||
@@ -298,6 +299,7 @@
|
|||||||
<Compile Include="Util\RegisterUtil.cs" />
|
<Compile Include="Util\RegisterUtil.cs" />
|
||||||
<Compile Include="Util\RelayCommand.cs" />
|
<Compile Include="Util\RelayCommand.cs" />
|
||||||
<Compile Include="Util\ScreenUtil.cs" />
|
<Compile Include="Util\ScreenUtil.cs" />
|
||||||
|
<Compile Include="Util\ScrollUtil.cs" />
|
||||||
<Compile Include="Util\ShellContextMenu.cs" />
|
<Compile Include="Util\ShellContextMenu.cs" />
|
||||||
<Compile Include="Util\ShowWindowFollowMouse.cs" />
|
<Compile Include="Util\ShowWindowFollowMouse.cs" />
|
||||||
<Compile Include="Util\StringUtil.cs" />
|
<Compile Include="Util\StringUtil.cs" />
|
||||||
|
|||||||
@@ -107,6 +107,11 @@ namespace GeekDesk
|
|||||||
|
|
||||||
if (!RunTimeStatus.SEARCH_BOX_SHOW) ShowSearchBox();
|
if (!RunTimeStatus.SEARCH_BOX_SHOW) ShowSearchBox();
|
||||||
|
|
||||||
|
//刷新搜索后 鼠标移动次数置为0
|
||||||
|
RunTimeStatus.MOUSE_MOVE_COUNT = 0;
|
||||||
|
//隐藏popup
|
||||||
|
RightCard.MyPoptip.IsOpen = false;
|
||||||
|
|
||||||
string inputText = SearchBox.Text.ToLower();
|
string inputText = SearchBox.Text.ToLower();
|
||||||
RightCard.VerticalUFG.Visibility = Visibility.Collapsed;
|
RightCard.VerticalUFG.Visibility = Visibility.Collapsed;
|
||||||
if (!string.IsNullOrEmpty(inputText))
|
if (!string.IsNullOrEmpty(inputText))
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"title": "GeekDesk版本更新",
|
"title": "GeekDesk版本更新",
|
||||||
"subTitle": "V2.5.12",
|
"subTitle": "V2.5.12",
|
||||||
"msgTitle": "本次更新内容如下",
|
"msgTitle": "本次更新内容如下",
|
||||||
"msg": "['求Star,求Star', '添加Win11显秒插件', '崩溃问题修复', '其它已知问题修复']",
|
"msg": "['求Star,求Star', '添加Win11显秒插件', '崩溃问题修复', '现在在右侧栏(快捷图标区域)也可以鼠标滚轮切换菜单了', '缩放屏幕截图问题修复(感谢@1062406901提的PR)', '其它已知问题修复']",
|
||||||
"githubUrl": "https://github.com/BookerLiu/GeekDesk/releases",
|
"githubUrl": "https://github.com/BookerLiu/GeekDesk/releases",
|
||||||
"giteeUrl": "https://gitee.com/BookerLiu/GeekDesk/releases",
|
"giteeUrl": "https://gitee.com/BookerLiu/GeekDesk/releases",
|
||||||
"version": "2.5.12"
|
"version": "2.5.12"
|
||||||
|
|||||||
@@ -490,6 +490,7 @@ namespace GeekDesk.Util
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
ListBoxItem item = this.GetListBoxItem( this.indexToSelect );
|
ListBoxItem item = this.GetListBoxItem( this.indexToSelect );
|
||||||
|
if (item == null) return false;
|
||||||
Rect bounds = VisualTreeHelper.GetDescendantBounds( item );
|
Rect bounds = VisualTreeHelper.GetDescendantBounds( item );
|
||||||
Point ptInItem = this.listBox.TranslatePoint( this.ptMouseDown, item );
|
Point ptInItem = this.listBox.TranslatePoint( this.ptMouseDown, item );
|
||||||
|
|
||||||
|
|||||||
75
Util/ScrollUtil.cs
Normal file
75
Util/ScrollUtil.cs
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Media;
|
||||||
|
|
||||||
|
namespace GeekDesk.Util
|
||||||
|
{
|
||||||
|
public class ScrollUtil
|
||||||
|
{
|
||||||
|
|
||||||
|
public static bool IsBootomScrollView(ScrollViewer view)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
bool isBottom = false;
|
||||||
|
double dVer = view.VerticalOffset;
|
||||||
|
double vViewport = view.ViewportHeight;
|
||||||
|
double eextent = view.ExtentHeight;
|
||||||
|
if (dVer + vViewport >= eextent)
|
||||||
|
{
|
||||||
|
isBottom = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
isBottom = false;
|
||||||
|
}
|
||||||
|
return isBottom;
|
||||||
|
} catch (Exception e)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsTopScrollView(ScrollViewer view)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
return (int)view.VerticalOffset == 0;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static T FindSimpleVisualChild<T>(DependencyObject element) where T : class
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
while (element != null)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (element is T)
|
||||||
|
return element as T;
|
||||||
|
if (VisualTreeHelper.GetChildrenCount(element) > 0)
|
||||||
|
{
|
||||||
|
element = VisualTreeHelper.GetChild(element, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user