亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

silverlight實(shí)現(xiàn)圖片局部放大效果的方法

 更新時間:2017年03月10日 11:01:50   作者:菩提樹下的楊過  
這篇文章主要介紹了silverlight實(shí)現(xiàn)圖片局部放大效果的方法,結(jié)合實(shí)例形式分析了silverlight針對圖片屬性的相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了silverlight實(shí)現(xiàn)圖片局部放大效果的方法。分享給大家供大家參考,具體如下:

很多購物平臺中(比如京東購物),瀏覽產(chǎn)品詳情時都有這種效果,前幾天看到有朋友問SL能不能實(shí)現(xiàn),當(dāng)然可以

界面:

1.左側(cè)小圖片(用一個矩形Fill一張圖片即可)
2.左側(cè)半透明矩形
3.右側(cè)大圖片(用一個Canvas設(shè)置Clip裁剪可視區(qū)域作為蒙板,圖片放置在Canvas中即可)

原理:

獲取左側(cè)半透明矩形的相對位置,然后動態(tài)調(diào)整右側(cè)大圖的Canvas.Left與Canvas.Top

需要知道以下技術(shù)點(diǎn):

1.Clip的應(yīng)用
2.如何拖動對象
3.拖動時的邊界檢測
4.動態(tài)調(diào)整對象的Canvas.Left與Canvas.Top屬性

尺寸要點(diǎn):

1.右側(cè)大圖可視區(qū)域與左側(cè)半透明矩形的“長寬比例”應(yīng)該相同
2.“圖片原始尺寸長度比” 應(yīng)該 “與左側(cè)小圖片長度比”相同
3.圖片原始大小/左側(cè)小圖大小 = 右側(cè)可視區(qū)域大小/半透明矩形大小

關(guān)鍵代碼:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
namespace PartMagnifier
{
  public partial class MainPage : UserControl
  {
    bool trackingMouseMove = false;
    Point mousePosition;
    public MainPage()
    {
      // 為初始化變量所必需
      InitializeComponent();
    }
    private void LayoutRoot_Loaded(object sender, System.Windows.RoutedEventArgs e)
    {
      Adjust();
    }
    private void Rectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
      FrameworkElement element = sender as FrameworkElement;
      mousePosition = e.GetPosition(element);
      trackingMouseMove = true;
      if (null != element)
      {
        element.CaptureMouse();
        element.Cursor = Cursors.Hand;
      }
      Adjust();
      Debug();
      sb.Begin();//標(biāo)題動畫,可去掉
    }
    private void Rectangle_MouseMove(object sender, MouseEventArgs e)
    {
      FrameworkElement element = sender as FrameworkElement;
      if (trackingMouseMove)
      {
        double deltaV = e.GetPosition(element).Y - mousePosition.Y;
        double deltaH = e.GetPosition(element).X - mousePosition.X;
        double newTop = deltaV + (double)element.GetValue(Canvas.TopProperty);
        double newLeft = deltaH + (double)element.GetValue(Canvas.LeftProperty);
        if (newLeft <= 10)
        {
          newLeft = 10;
        }
        if (newLeft >= 130)
        {
          newLeft = 130;
        }
        if (newTop <= 10) { newTop = 10; }
        if (newTop >= 85) { newTop = 85; }
        element.SetValue(Canvas.TopProperty, newTop);
        element.SetValue(Canvas.LeftProperty, newLeft);
        mousePosition = e.GetPosition(element);
        Adjust();
        if (mousePosition.X <= 0 || mousePosition.Y <= 0) { return; }
        Debug();
      }
    }
    private void Rectangle_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
    {
      FrameworkElement element = sender as FrameworkElement;
      trackingMouseMove = false;
      element.ReleaseMouseCapture();
      mousePosition.X = mousePosition.Y = 0;
      element.Cursor = null;
    }
    /// <summary>
    /// 調(diào)試信息
    /// </summary>
    void Debug()
    {
      txtResult.Text = "鼠標(biāo)相對坐標(biāo):" + mousePosition.ToString() + "\n小框left:" + rect.GetValue(Canvas.LeftProperty) + ",小框top:" + rect.GetValue(Canvas.TopProperty) + "\n大圖left:" + ((double)img.GetValue(Canvas.LeftProperty)).ToString("F0") + ",大圖right:" + ((double)img.GetValue(Canvas.TopProperty)).ToString("F0");
    }
    /// <summary>
    /// 調(diào)整右側(cè)大圖的位置
    /// </summary>
    void Adjust()
    {
      double n = cBig.Width / rect.Width;
      double left = (double)rect.GetValue(Canvas.LeftProperty) - 10;
      double top = (double)rect.GetValue(Canvas.TopProperty) - 10;
      double newLeft = -left * n;
      double newTop = -top * n;
      img.SetValue(Canvas.LeftProperty, newLeft);
      img.SetValue(Canvas.TopProperty, newTop);
    }
  }
}

更多關(guān)于C#相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《C#圖片操作技巧匯總》、《C#常見控件用法教程》、《WinForm控件用法總結(jié)》、《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#面向?qū)ο蟪绦蛟O(shè)計入門教程》及《C#程序設(shè)計之線程使用技巧總結(jié)

希望本文所述對大家C#程序設(shè)計有所幫助。

相關(guān)文章

  • 淺析C#中結(jié)構(gòu)與類的區(qū)別

    淺析C#中結(jié)構(gòu)與類的區(qū)別

    本文主要對C#結(jié)構(gòu)與類的區(qū)別進(jìn)行簡要分析,文中舉了實(shí)例,便于理解,具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • C#窗體實(shí)現(xiàn)點(diǎn)餐系統(tǒng)

    C#窗體實(shí)現(xiàn)點(diǎn)餐系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C#窗體實(shí)現(xiàn)點(diǎn)餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • c# 操作word寫入特殊字符的實(shí)例

    c# 操作word寫入特殊字符的實(shí)例

    這篇文章主要介紹了c# 操作word寫入特殊字符的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • c# 網(wǎng)絡(luò)編程之http

    c# 網(wǎng)絡(luò)編程之http

    這篇文章主要介紹了c# 提供一個HTTP服務(wù)的實(shí)現(xiàn)示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2021-02-02
  • C#實(shí)現(xiàn)跨線程操作控件方法

    C#實(shí)現(xiàn)跨線程操作控件方法

    這篇文章主要介紹了C#實(shí)現(xiàn)跨線程操作控件方法,主要采用異步訪問方式實(shí)現(xiàn),需要的朋友可以參考下
    2014-10-10
  • c#抽簽系統(tǒng)的實(shí)現(xiàn)示例

    c#抽簽系統(tǒng)的實(shí)現(xiàn)示例

    本文主要介紹了c#抽簽系統(tǒng)的實(shí)現(xiàn)示例,一個基于c#的簡單抽簽系統(tǒng),可以重新導(dǎo)入數(shù)據(jù),清空數(shù)據(jù)。文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C#記一次http協(xié)議multipart/form-data的boundary問題

    C#記一次http協(xié)議multipart/form-data的boundary問題

    這篇文章主要介紹了C#記一次http協(xié)議multipart/form-data的boundary問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • 淺析JAVA中過濾器、監(jiān)聽器、攔截器的區(qū)別

    淺析JAVA中過濾器、監(jiān)聽器、攔截器的區(qū)別

    本文通過代碼分析和文字說明的方式給大家淺析JAVA中過濾器、監(jiān)聽器、攔截器的區(qū)別,感興趣的朋友一起看下吧
    2015-09-09
  • C# 匿名方法基礎(chǔ)回顧

    C# 匿名方法基礎(chǔ)回顧

    本篇文章主要介紹了C#的匿名方法的參數(shù)使用范圍以及委托示例。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • 詳解 c# 克隆

    詳解 c# 克隆

    這篇文章主要介紹了詳解 c# 克隆的相關(guān)資料,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-11-11

最新評論