4

我正在寻找以下情况的解决方案。

在我的应用程序中,我有一个页面说 page1,我在 page1 中放置了一个用户控件。我的要求是我需要在 page1 的代码后面获取用户控件中使用的按钮的单击事件。我如何在 windows phone / silverlight 中实现相同的目标。

4

3 回答 3

14

1.第一种和正确的方法:

(如果您知道 MVVM 模式)将由您控制,例如MyControl,公开类型的 DependencyProperty ICommand,例如 MyControlButtonClickCommand。

xml:

<UserControl>
    <Button Command={Binding MyControlButtonClickCommand, Source={RelativeSource Self}} />
</UserControl>  

代码隐藏:

public ICommand MyControlButtonClickCommand
{
    get { return (ICommand)GetValue(MyControlButtonClickCommandProperty); }
    set { SetValue(MyControlButtonClickCommandProperty, value); }
}

public static readonly DependencyProperty MyControlButtonClickCommandProperty =
        DependencyProperty.Register("MyControlButtonClickCommand", typeof(ICommand), typeof(MyControl), new PropertyMetadata(null));  

您将按如下方式使用 UserControl:

<phone:PhoneApplicationPage>

    <namespace:MyControl MyControlButtonClickCommand="{Binding ControlButtonCommand}" />

</phone:PhoneApplicationPage>

ControlButtonCommandViewModel(您的自定义对象)的属性在哪里,位于您的Page.

2.还有一种更简单、更脏的方法,我不鼓励你去:

就像您公开MyControlButtonClickCommand依赖属性而不是公开它一样,您可以公开一个事件MyControlButtonClick并在页面的 xaml 中订阅它。在您的 UserControl 代码内部,您应该订阅它的按钮Click事件并触发它自己的MyControlButtonClick事件。

希望这会帮助你。

于 2012-12-05T06:35:24.123 回答
1

有两种方法可以做到这一点,最简单的方法是双击演示布局上的按钮。

或者

在 XML 添加 onCLick= 这样做会弹出菜单来选择新事件。单击它,您的按钮单击事件应该在后面的代码中。

<button name="b1" onClick="button1_Click()"/> <!--this is what ur XAML will look like -->

处理按钮点击

private void button1_Click(object sender, RoutedEventArgs e)
{
    // Handle the click event here

}
于 2012-12-03T06:38:01.757 回答
0

对于 UserControl,您可以创建 Page1.xaml.cs 将实现的接口。

public partial Class SomeControl : UserControl
{
    private OnButtonClick button_click;

    public interface OnButtonClick
    {
        void someMethod();   // generic, you can also use parameters to pass objects!!
    }

    // Used to add interface to dynamic controls
    public void addButtonClickInterface(OnButtonClick button_click)
    {
        this.button_click = button_click;
    }

    // Buttons UserControlled Click
    private void ButtonClick(object sender, RoutedEventArgs e)
    {
        if(button_click != null)
        {
            button_click.someMethod();  
        }
    }

}

以下是如何实现和使用它。

public partial class Page1 : PhoneApplicationPage, SomeControl.OnButtonClick
{

    public Page1()
    {
        InitializeComponent()

        // for a new Control
        SomeControl cntrl = new SomeControl();
        cntrl.addButtonClickInterface(this);

        // or for a control in your xaml
        someControl.addButtonClickInterface(this);
    }

    public void someMethod()
    {
        // Here is where your button will trigger!!
    }

}
于 2013-09-06T09:15:28.867 回答