Создание контекстного меню в silverlight или как обработать щелчок правой кнопкой мыши.

Интересно, что для таких, вроде бы, привычных вещей как меню по нажатию правой кнопки мыши, в silverlight нет специальных классов. Но это не проблема, сейчас вы сами в этом убедитесь. Вот что в итоге получится:

Начнем. Итак, напишем простенький XAML:

<UserControl x:Class="RightButtonContext.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="Auto" Height="Auto">
    <Canvas x:Name="LayoutRoot" Background="GreenYellow">
        <TextBlock Text="NO" x:Name="myTextBlock" />
       <!-- Меню -->
        <StackPanel Visibility="Collapsed" x:Name="menu" Width="100">
            <Button Content="Кликни меня!!"/>
            <Button Content="Или меня!"/>
            <Button Content="О разработчиках"/>
        </StackPanel>
    </Canvas>
</UserControl>

 

Открываем .cs файл и пишем следующее:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
//Необходимо добавить пространство имен,
//в котором содержатся классы для взаимодействия
//с HTML документом
using System.Windows.Browser;
 
namespace RightButtonContext
{
    public partial class Page : UserControl
    {
        public Page()
        {
            InitializeComponent();
            //Присоединяем обработчик для
            //события нажатия правой кнопки мыши
            HtmlPage.Document.AttachEvent("oncontextmenu",
                this.OnContextMenu);
            //Обработчик для события опускания
            //левой кнопки мыши
            this.MouseLeftButtonDown += 
             new MouseButtonEventHandler(Page_MouseLeftButtonDown);
        }
 
        void Page_MouseLeftButtonDown(object sender,
            MouseButtonEventArgs e)
        {
            menu.Visibility = Visibility.Collapsed;
        }
 
        private void OnContextMenu(object sender,
            HtmlEventArgs e)
        {
            //Назначаем текст для отображения
            //в textblock, в данном случае
            //координаты курсора
            myTextBlock.Text = "Позиция курсора: "
                + e.OffsetX + "," + e.OffsetY;
            //Устанавливаем координаты появления меню
            menu.SetValue(Canvas.TopProperty, (double)e.OffsetY);
            menu.SetValue(Canvas.LeftProperty, (double)e.OffsetX);
            //Делаем меню видимым
            menu.Visibility = Visibility.Visible;
            //Предотвращаем стандартное событие,
            //т.е. появление меню плагина
            e.PreventDefault();
        }
        private void OnPageClick(object sender,
            HtmlEventArgs e)
        {
            //Делаем меню невидимым
            menu.Visibility = Visibility.Collapsed;
        }
    }
}

Также нужно сменить атрибут плагина windowless на true. Открываем .aspx файл с СЛ контентом, находим тег <asp:Silverlight /> и добавляем строчку Windowless="true":

 <asp:Silverlight ID="Xaml1" Windowless="true" 
    runat="server" Source="~/ClientBin/RightButtonContext.xap"
    MinimumVersion="2.0.30523" Width="100%" Height="100%" />

 

На этом все. Можно тестировать! Самое интересное, что вы можете отреагировать на нажатие как угодно! Хоть на другой сайт перейти ;)

Posted on 02.07.2008 14:09:00 by Admin

Permalink | Комментарии (0) | Post RSSRSS comment feed |

Categories: Silverlight

Tags: , , ,

Оценок нет

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Похожие записи

Добавить комментарий


(Отображает Gravatar)  

  Country flag

[b][/b] - [i][/i] - [u][/u]- [quote][/quote]



Предпросмотр

сентября 6. 2008 02:54