【问题标题】:How to achieve click event via dependency property in silverlight?如何通过silverlight中的依赖属性实现点击事件?
【发布时间】:2012-01-13 05:08:10
【问题描述】:

我对 Silverlight 世界还很陌生,所以请多多包涵。我创建了一个自定义透视项控件以显示在透视控件中。现在在这个自定义控件中有一个按钮。现在我可以将点击事件处理程序添加到自定义控件的支持 cs 文件中的按钮,这样就可以了。但是有没有办法让我在自定义控件的声明过程中指定自定义控件按钮的事件处理程序?即我的 pivot_page.xaml 中的类似内容

<custom:myPivotItem background="..." height=".." width=".." click="myHandler"/>

myHandler 在 pivot_page.cs 中的声明位置?谢谢

【问题讨论】:

    标签: c# .net silverlight xaml


    【解决方案1】:

    您可以在自定义控件上公开一个映射到按钮单击事件的公共事件。

    public event RoutedEventHandler Click
    {
        add { this.button.Click += value; }
        remove { this.button.Click -= value; }
    }
    

    【讨论】:

    • 感谢为按钮工作,我尝试将其应用于 EventHandler 类型的矩形的 Tap 事件,但它不起作用。我什至为它添加了一个依赖属性,但我得到了一个例外。有什么想法吗?
    • @Cool Dude - 您应该能够使用相同的方法,但您的事件还必须定义为 EventHandler 类型:public event EventHandler&lt;GestureEventArgs&gt; Tap { add { ... } remove { ... } }
    • 现在我得到一个空指针异常,因为在调用 onApplyTemplate() 之前在公共事件属性中引用了矩形对象。
    • @Cool Dude - 我不确定。查看this answer;也许你也有同样的问题。
    • @@Dr.可悲的是,这也无济于事。谢谢
    【解决方案2】:

    通过在自定义控件 cs 文件 (myCustomPivotItem.cs) 中声明 RoutedEventHandler 来解决此问题。

     public event RoutedEventHandler Click;
    

    然后在 onApplyTemplate 我可以访问矩形对象

     Rectangle rect = this.GetTemplateChild("rectObject") as Rectangle;
     rect.Tap += new EventHandler<GestureEventArgs>(RectView_Tap);
    

    然后我在同一个 cs 文件 (myCustomPivotItem.cs) 中声明了 RectView_Tap

        private void RectView_Tap(object sender, GestureEventArgs e)
        {
            if (Click != null)
                Click(this, new RoutedEventArgs());
        }
    

    在我的 MainPage.xaml 中,我像这样声明了自定义控件

     <controls:PivotItem x:Name="pivotitem2">
         <view:myCustomePivotItem x:Name="custompivotItem2" Click="myHandler"/>
     </controls:PivotItem>
    

    在 MainPage.cs 中我声明了 myHandler...

     void myHandler(object sender, RoutedEventArgs e)
        {
            //delegate operation
            MessageBox.Show("Clicked!");
        }
    

    它按预期工作! :) 希望它能帮助任何需要它的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-16
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-07
      • 2022-12-17
      • 1970-01-01
      相关资源
      最近更新 更多