WPF之鼠標滑動切換圖片

原文:WPF之鼠標滑動切換圖片

  在網上找了一會兒也沒找到我想要的效果,還是自己動手,豐衣足食吧。

  需求:當前面板中只顯示一張圖片,圖片欄的下部有用來顯示當前圖片處于圖片隊列中的位置的圓球,并且點擊下部欄內的圓球可以快速切換,附動畫緩動效果。

?

  比較簡單,但是還是簡單說一下開發的思路吧。

  主要是要有一個容器放置很多張圖片,然后讓它們排列好,增加鼠標事件以達到左右滑動的效果,要關聯外部控件控制圖片的位置,那么就要有一個依賴屬性來控制。

  首先,我們來一個Canvas,然后要讓里面的子項排列好,不然它們就堆在一起了。(艾瑪,你說為啥不用StackPanel呢?)

  #region 繪制窗口//分配容器的大小protected override Size MeasureOverride(Size constraint){Size size = new Size(_width, _height);foreach (UIElement e in InternalChildren){e.Measure(new Size(_width, _height));}return size;}//分配子項的大小protected override Size ArrangeOverride(Size arrangeSize){for (int i = 0; i < InternalChildren.Count; i++){InternalChildren[i].Arrange(new Rect(i * _width, 0, _width, _height));}return arrangeSize;}#endregion
繪制窗口

  然后為Canvas加上鼠標事件用來滑動,其實這個很簡單的,就是鼠標摁下去的點和起來的點的一個距離判斷,如果距離夠了,就移動一個子項的距離,至于左右就要看你自己怎么設置了,這里也是為什么不用StackPanel的原因了,

  因為這邊Canvas我繪制的窗口之中,我會去設置子項的大小,然后根據子項的大小來實現滑動及統一,這樣比較方便。

      void CanvasWithPhoto_MouseUp(object sender, System.Windows.Input.MouseButtonEventArgs e){_endPoint = e.GetPosition(App.Current.MainWindow);//X軸滑動的距離double offsetX = _startPoint.X - _endPoint.X;if (offsetX > 10 && Index < _totalPage){++Index;}else if (offsetX < -10 && Index > 1){--Index;}Move(Index);}//X軸的移動動畫private void Move(int Index){DoubleAnimation animation = new DoubleAnimation(-(Index - 1) * _width, TimeSpan.FromMilliseconds(500));animation.DecelerationRatio = 0.2;animation.AccelerationRatio = 0.2;_translate.BeginAnimation(TranslateTransform.XProperty, animation);}void CanvasWithPhoto_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e){_startPoint = e.GetPosition(App.Current.MainWindow);}
鼠標事件

  艾瑪,這里就有人說了那Index是什么啊,這里就是當前頁面了,因為需求里面是想快速定位到圖片的,第三張跳到第七張這個樣子的,所以用了一個Index,這個就是依賴屬性,而且添加了一個自定義的事件,留出一個接口方便以后使用,其實這個程序里面我也沒有用上,純粹就是習慣。

  //當前頁public int Index{get { return (int)GetValue(IndexProperty); }set { SetValue(IndexProperty, value); }}public static readonly DependencyProperty IndexProperty =DependencyProperty.Register("Index", typeof(int), typeof(CanvasWithPhoto), new FrameworkPropertyMetadata(1, new PropertyChangedCallback(OniIndexChanged)));public static void OniIndexChanged(DependencyObject sender,DependencyPropertyChangedEventArgs e){CanvasWithPhoto c = (CanvasWithPhoto)sender;int newValue = (int)e.NewValue;int oldValue = (int)e.OldValue;c.Index = (int)e.NewValue;c.OnIndexChanged(oldValue, newValue);}private void OnIndexChanged(int oldValue, int newValue){RoutedPropertyChangedEventArgs<int> args= new RoutedPropertyChangedEventArgs<int>(oldValue, newValue);args.RoutedEvent = IndexChangedEvent;RaiseEvent(args);Move(newValue);}public static RoutedEvent IndexChangedEvent =EventManager.RegisterRoutedEvent("IndexChanged", RoutingStrategy.Bubble, typeof(RoutedPropertyChangedEventHandler<int>), typeof(CanvasWithPhoto));public event RoutedPropertyChangedEventHandler<int> IndexChanged{add { AddHandler(IndexChangedEvent, value); }remove { RemoveHandler(IndexChangedEvent, value); }}
依賴屬性

最后,自定義的CanvasWithImage是不會限制長度的,這樣就會有一個圖片會全部顯示出來的問題,這里我是用一個StackPanel包裹住,這個StackPanel是有一個寬度限制的,ClipToBounds="True",設置這個屬性,會講超出部分的內容裁減隱藏。

簡陋的效果圖:

軟件環境:VisualStudio2010 + Windows 7

http://download.csdn.net/detail/qq278709708/9150335

不足的地方大家多多指教

?

  

  

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538040.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538040.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538040.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CPU的核心數、線程數的關系和區別

原文地址&#xff1a;http://blog.csdn.net/yu132563/article/details/45222935 ------------------------------------- 我們在選購電腦的時候&#xff0c;CPU是一個需要考慮到核心因素&#xff0c;因為它決定了電腦的性能等級。CPU從早期的單核&#xff0c;發展到現在的雙核…

mysql in 子查詢優化_mysql in 子查詢 容易優化

mysql in 子查詢 簡單優化 大數量下&#xff0c;不要使用 in 嵌套子查詢&#xff0c;性能很差&#xff0c;很容易卡死。 ? 簡單調整方式如下&#xff1a; select uid,nick_name from uc_users where uid in(select fid from uc_follow where uid#uid#) ? 可拆解成&#xff1a…

谷歌瀏覽器插件入門示例

2019獨角獸企業重金招聘Python工程師標準>>> 實現&#xff1a;任何網址實現圖片下載和獲取當前域名的cookies的json字符串。 圖片下載是給小白用的&#xff0c;可以選中批量下載&#xff0c;獲取cookies 是為了方便程序員調試用。 獲取cookies: git地址&#xff1a;…

Fiddler中response亂碼的解決方案

原文連接&#xff1a;http://blog.csdn.net/quiet_girl/article/details/50577828 ---------------------------------------------------------- 有時候我們看到Response中的HTML是亂碼的&#xff0c; 這是因為HTML被壓縮了&#xff0c; 我們可以通過兩種方法去解壓縮。 解決…

線程帶來的風險

線程安全性問題 多線程環境下 多個線程共享一個資源對資源進行非原子性操作。 以上三者都存在就會發生線程安全性問題 如文中的賣火車票問題&#xff1a;http://blog.csdn.net/zengmingen/article/details/53217229 原因是&#xff1a;一行java代碼轉成.class字節碼文件后是…

vue內引入語音播報功能

為什么80%的碼農都做不了架構師&#xff1f;>>> 在vue項目中引入語音播報&#xff0c;使用的科大訊飛語音接入&#xff0c; 具體思路為每次接收到語音信息后存入一個數組&#xff0c;然后監聽這個數組&#xff0c;開始沖第一個索引播放&#xff0c;并且同時根據vue…

php mysql 排序規則_php 數組排序以及按照某個字段排序

如果你已經使用了一段時間PHP的話&#xff0c;那么&#xff0c;你應該已經對它的數組比較熟悉了——這種數據結構允許你在單個變量中存儲多個值&#xff0c;并且可以把它們作為一個集合進行操作。經常&#xff0c;開發人員發現在PHP中使用這種數據結構對值或者數組元素進行排序…

單例問題與線程安全

餓漢式 沒有線程安全性問題 懶漢式 public class SingletonDemo2 {private static SingletonDemo2 instance;private SingletonDemo2() {}public static SingletonDemo2 getInstance() {if(instancenull) {instancenew SingletonDemo2();}return instance;}}如果遇到多線程。上…

python 音速_中國大學MOOC的APP(慕課)2021用Python玩轉數據章節答案

在高技術戰爭件下,信息的獲取相當于人的感覺器官,信息的傳輸相當于人的神經網絡,信息的處理相當于人的大腦,( )則將它們聯系為一個整體,構成了作戰的神經系統。車身可拆卸的連接有螺紋連接、卡口鏈接、鉸鏈連接。在高技術戰爭件下,信息的獲取相當于人的感覺器官,信息的傳輸相當…

Mysql中的觸發器

原文地址&#xff1a;https://www.cnblogs.com/zyshi/p/6618839.html ---------------------------------------------------------什么是觸發器 簡單的說&#xff0c;就是一張表發生了某件事&#xff08;插入、刪除、更新操作&#xff09;&#xff0c;然后自動觸發了預先編寫好…

一張圖理解JS的原型(prototype、_proto_、constructor的三角關系)

注意&#xff1a;前方高能預警&#xff0c;請認真仔細看完&#xff0c;閱讀完后自己再次畫下原型圖&#xff0c;相信你一定會有更深刻的認識。(推薦炒雞好用的畫流程圖的軟件ProcessOn)構造函數&#xff1a;function Foo ( ) { };實例對象&#xff1a;let f1new Foo;let o1new …

Oracle觸發器和MySQL觸發器之間的區別

原文鏈接&#xff1a;http://blog.csdn.net/a19881029/article/details/37820363 -----------------------------------------------------------Oracle觸發器格式&#xff1a;[plain] view plaincopyCREATE [OR REPLACE] TRIGGER trigger_name BEFORE|AFTER INSERT|UPDA…

下列選項中不符合python語言變量命名規則的是_學習Python第二日--基本概念和類型...

編程語言分類:解釋型語言和編譯型語言。解釋型語言不會產生額外的文件,運行時一行一行的翻譯。編譯型語言需要產生一個額外的文件,是電腦能夠識別的內容,運行后將產生額外的文件。 變量是可變的量,是它的值可以發生改變。變量的作用是保存值,保存的值可以是數據,而且保存…

HashMap死鎖原因及替代方案

原文鏈接&#xff1a;http://blog.csdn.net/fhzaitian/article/details/51505516 ------------------------------------------------------------------------1、首先我們需要簡單地了解一下HashMap數據結構 HashMap通常會用一個指針數組&#xff08;假設為table[]&#xff09…

優化mysql數據庫_MySQL數據庫十大優化技巧

WEB開發者不光要解決程序的效率問題&#xff0c;對數據庫的快速訪問和相應也是一個大問題。希望本文能對大家掌握MySQL優化技巧有所幫助。1. 優化你的MySQL查詢緩存在MySQL服務器上進行查詢&#xff0c;可以啟用高速查詢緩存。讓數據庫引擎在后臺悄悄的處理是提高性能的最有效方…

跋山涉水——深入 Redis 字典遍歷

Redis 字典的遍歷過程邏輯比較復雜&#xff0c;互聯網上對這一塊的分析講解非常少。我也花了不少時間對源碼的細節進行了整理&#xff0c;將我個人對字典遍歷邏輯的理解呈現給各位讀者。也許讀者們對字典的遍歷過程有比我更好的理解&#xff0c;還請不吝指教。一邊遍歷一邊修改…

linux下VI模式中上下左右鍵和回退鍵出現字母

原文地址&#xff1a;http://blog.csdn.net/u012860950/article/details/50127779 ---------------------------------------------------------------- 1.編輯/etc/vim/vimrc.tiny 由于/etc/vim/vimrc.tiny的擁有者是root用戶&#xff0c;所以要在root的權限下對這個文件進行修…

mysql數據庫查詢優化建議_mysql數據庫查詢優化的24條建議

MySQL是一個強大的開源數據庫。隨著MySQL上的應用越來越多&#xff0c;MySQL逐漸遇到了瓶頸。這里提供一些關于Mysql 數據庫查詢優化的24條優化建議&#xff0c;僅供參考。Mysql 查詢優化1、使用慢查詢日志&#xff0c;找出執行慢的查詢。2、使用 EXPLAIN 來決定查詢功能是否合…

常規sql讀取CLOB

plsql下&#xff0c;普通sqlsql-cmd下總結&#xff1a; 常規的sql&#xff0c;查詢clob字段&#xff0c;只能顯示部分內容。 查clob內容select dbms_lob.substr(c_content) from table_content t dbms_lob.substr將大文本轉換字符類型讀出來.dbms_lob.substr的轉換對字段conten…

精解 ES6箭頭函數

&#x1f431; 個人主頁&#xff1a;SHOW科技&#xff0c;公眾號&#xff1a;SHOW科技 &#x1f64b;?♂? 作者簡介&#xff1a;2020參加工作&#xff0c;專注于前端各領域技術&#xff0c;共同學習共同進步&#xff0c;一起加油呀&#xff01; &#x1f4ab;優質專欄&#x…