none
请问怎样在silverlight中使用右键弹出菜单呢? RRS feed

  • 问题

  • RT,我看到有个视频上他就是用右键操作弹出菜单的,不知道怎样实现的,有这方面的文章吗?


    stoneluo
    2009年5月20日 10:09

答案

  • <asp:Silverlight ID="Xaml1" Windowless="true" runat="server" Source="~/ClientBin/SilverlightApplication1.xap" MinimumVersion="2.0.30523" Width="100%" Height="100%" />
    
    <param name="windowless" value="true" />
    public Page()
    {
        HtmlPage.Document.AttachEvent("oncontextmenu", this.OnContextMenu);
    }
    
    private void OnContextMenu(object sender, HtmlEventArgs e)
    {
            string X = e.OffsetX;
            string y = e.OffsetY;
            e.PreventDefault();
     }
    <UserControl x:Class="RightClick_Silverlight.Page"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Width="400" Height="300">
        <Grid x:Name="LayoutRoot" Background="White">
            <TextBlock x:Name="MyField">Right click please.</TextBlock>
        </Grid>
    </UserControl>
    主要就是重写一下contentmenu事件
    2009年5月20日 10:43
    版主

全部回复

  • <asp:Silverlight ID="Xaml1" Windowless="true" runat="server" Source="~/ClientBin/SilverlightApplication1.xap" MinimumVersion="2.0.30523" Width="100%" Height="100%" />
    
    <param name="windowless" value="true" />
    public Page()
    {
        HtmlPage.Document.AttachEvent("oncontextmenu", this.OnContextMenu);
    }
    
    private void OnContextMenu(object sender, HtmlEventArgs e)
    {
            string X = e.OffsetX;
            string y = e.OffsetY;
            e.PreventDefault();
     }
    <UserControl x:Class="RightClick_Silverlight.Page"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        Width="400" Height="300">
        <Grid x:Name="LayoutRoot" Background="White">
            <TextBlock x:Name="MyField">Right click please.</TextBlock>
        </Grid>
    </UserControl>
    主要就是重写一下contentmenu事件
    2009年5月20日 10:43
    版主
  • 做过记号,回去试试,谢谢各位~
    视别人的帮助为恩赐~
    2009年5月20日 14:55
  • <asp:Silverlight ID="Xaml1" Windowless="true" runat="server" Source="~/ClientBin/SilverlightApplication1.xap" MinimumVersion="2.0.30523" Width="100%" Height="100%" />
    
    
    
    <param name="windowless" value="true" />
    public Page()
    
    {
    
        HtmlPage.Document.AttachEvent("oncontextmenu", this.OnContextMenu);
    
    }
    
    
    
    private void OnContextMenu(object sender, HtmlEventArgs e)
    
    {
    
            string X = e.OffsetX;
    
            string y = e.OffsetY;
    
            e.PreventDefault();
    
     }
    <UserControl x:Class="RightClick_Silverlight.Page"
    
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    
        Width="400" Height="300">
    
        <Grid x:Name="LayoutRoot" Background="White">
    
            <TextBlock x:Name="MyField">Right click please.</TextBlock>
    
        </Grid>
    
    </UserControl>
    主要就是重写一下contentmenu事件

    搞定,原来是这样,谢谢八爪熊
    stoneluo
    2009年5月20日 15:28
  • 对了,又出问题了,我在oncontextmenu事件里动态添加了一个stackpanel,里面有3个按钮,按钮都添加了左键单击事件,但是单击按钮后不响应啊?

    public MainPage()
            {
                InitializeComponent();
                HtmlPage.Document.AttachEvent("oncontextmenu", this.OnContextMenu);
                //HtmlPage.Document.AttachEvent("onmousemove", this.onmousemove);
               // HtmlPage.Document.AttachEvent("onmousedown", this.onmousedown);
                TextBlock tb1 = new TextBlock();
                tb1.Text = "finish";
                tb1.Width = 60;
                tb1.Height = 30;
                tb1.MouseLeftButtonDown += new MouseButtonEventHandler(tb1_MouseLeftButtonDown);
                TextBlock tb2 = new TextBlock();
                tb2.Text = "deletelast";
                tb2.Width = 60;
                tb2.Height = 30;
                tb2.MouseLeftButtonDown += new MouseButtonEventHandler(tb2_MouseLeftButtonDown);
                TextBlock tb3 = new TextBlock();
                tb3.Text = "clear";
                tb3.Width = 60;
                tb3.Height = 30;
                tb3.MouseLeftButtonDown += new MouseButtonEventHandler(tb3_MouseLeftButtonDown);
                stackpanel.Children.Add(tb1);
                stackpanel.Children.Add(tb2);
                stackpanel.Children.Add(tb3);
                SolidColorBrush color = new SolidColorBrush(Colors.Red);
                stackpanel.Background = color;
    }
     void tb3_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
            {
                //throw new NotImplementedException();
                this.LayoutRoot.Children.Remove(stackpanel);
                MessageBox.Show("hello ,you have click the finish button");
            }
    private void OnContextMenu(object sender, HtmlEventArgs e)
            {
                string X = e.OffsetX.ToString();
                string y = e.OffsetY.ToString();
                Canvas.SetLeft(stackpanel, e.OffsetX);
                Canvas.SetTop(stackpanel, e.OffsetY);
                this.LayoutRoot.Children.Add(stackpanel);
                e.PreventDefault();
            }

    stoneluo
    2009年5月21日 2:00
  • 请改用Button的Click事件就可以操作了,按钮不要用LeftButtonDown,无效,用Click
    2009年5月21日 13:14
    版主