2020年12月23日星期三

WPF 开发的实用小工具(附源码)持续更新(七)根据应用首个字的首字母按键定位

接着上一篇  

 点击链接加入群聊

 在使用过程中当应用太多很难快速的找到并定位到自己所需要使用的应用,所以此次做了更新方便快速查找应用。

【update】
1、输入应用首字的首字母定位。

 

键盘按下 KeyDown 

定义ScrollViewer 所需要滚动值 double offset = 0.0;。

定义 bool isFind = false; 如果为 True 找到就不查找控件。

1、通过FindChild查找ScrollViewer方便最后定位使用。

ScrollViewer scrollViewer = ControlsHelper.FindChild<ScrollViewer>(this.AppSwitchList, "PART_ScrollViewer");

2、通过FindVisualChildren查找我所定义DataTemplate下的Border。

var elementList = ControlsHelper.FindVisualChildren<Border>(this.AppSwitchList).ToList();

3、循环 elementList 集合,判断 Tag 不等于 null 时对 offset += element.ActualHeight ,并且相等于按下键盘的Key值。

if (element.Tag != null && element.Tag.ToString().Equals(_key))
4、定位到找到的第一个与Key相等的。

scrollViewer.ScrollToVerticalOffset(offset);

var _key = Win32Api.GetCharFromKey(e.Key).ToString().ToUpper();   if (string.IsNullOrWhiteSpace(_key))    return;   double offset = 0.0;   ScrollViewer scrollViewer = ControlsHelper.FindChild<ScrollViewer>(this.AppSwitchList, "PART_ScrollViewer");   var elementList = ControlsHelper.FindVisualChildren<Border>(this.AppSwitchList).ToList();   bool isFind = false;   for (int i = 0; i < elementList.Count; i++)   {    var element = elementList[i];    if (isFind) break;    if (element.Tag != null)    {     offset += element.ActualHeight;     if (element.Tag.ToString().Equals(_key))     {      offset -= element.ActualHeight;      scrollViewer.ScrollToVerticalOffset(offset);      isFind = true;     }    }   }   this.KeyDownText.Text = _key;   this.KeyDownPanel.Visibility = Visibility.Visible;

View Code

获取按键转译

public enum MapType : uint  {   MAPVK_VK_TO_VSC = 0x0,   MAPVK_VSC_TO_VK = 0x1,   MAPVK_VK_TO_CHAR = 0x2,   MAPVK_VSC_TO_VK_EX = 0x3,  }  [DllImport("user32.dll")]  public static extern int ToUnicode(   uint wVirtKey,   uint wScanCode,   byte[] lpKeyState,   [Out, MarshalAs(UnmanagedType.LPWStr, SizeParamIndex = 4)]   StringBuilder pwszBuff,   int cchBuff,   uint wFlags);  [DllImport("user32.dll")]  public static extern bool GetKeyboardState(byte[] lpKeyState);  [DllImport("user32.dll")]  public static extern uint MapVirtualKey(uint uCode, MapType uMapType);  public static char GetCharFromKey(Key key)  {   char ch = ' ';   int virtualKey = KeyInterop.VirtualKeyFromKey(key);   byte[] keyboardState = new byte[256];   GetKeyboardState(keyboardState);   uint scanCode = MapVirtualKey((uint)virtualKey, MapType.MAPVK_VK_TO_VSC);   StringBuilder stringBuilder = new StringBuilder(2);   int result = ToUnicode((uint)virtualKey, scanCode, keyboardState, stringBuilder, stringBuilder.Capacity, 0);   switch (result)   {    case -1:     break;    case 0:     break;    case 1:     {      ch = stringBuilder[0];      break;     }    default:     {      ch = stringBuilder[0];      break;     }   }   return ch;  }

View Code

 抬起后隐藏

 Thread.Sleep(300);   this.KeyDownPanel.Visibility = Visibility.Collapsed;

View Code

 

 效果图

 

 源码下载地址

 gitee

下载解压后体验









原文转载:http://www.shaoqun.com/a/502712.html

跨境电商:https://www.ikjzd.com/

瀚霖:https://www.ikjzd.com/w/2345

活动树:https://www.ikjzd.com/w/1518


接着上一篇点击链接加入群聊在使用过程中当应用太多很难快速的找到并定位到自己所需要使用的应用,所以此次做了更新方便快速查找应用。【update】1、输入应用首字的首字母定位。键盘按下KeyDown定义ScrollViewer所需要滚动值doubleoffset=0.0;。定义boolisFind=false;如果为True找到就不查找控件。1、通过FindChild查找ScrollViewer方便最
易佰:易佰
google correlate:google correlate
南山欢乐海岸水族馆怎么样?欢乐海岸水族馆有什么玩的?:南山欢乐海岸水族馆怎么样?欢乐海岸水族馆有什么玩的?
【大理怎么玩】到大理怎么玩好,大理最佳旅游路线推荐:【大理怎么玩】到大理怎么玩好,大理最佳旅游路线推荐
嵊泗游记_舟山旅游攻略:嵊泗游记_舟山旅游攻略

没有评论:

发表评论