Windows phone 7 处理用户控件在其保留页中的事件';s代码隐藏
我正在寻找以下情况的解决方案Windows phone 7 处理用户控件在其保留页中的事件';s代码隐藏,windows-phone-7,silverlight-4.0,Windows Phone 7,Silverlight 4.0,我正在寻找以下情况的解决方案 在我的应用程序中,我有一个页面,比如page1,我在page1中放置了一个用户控件。我的要求是我需要在page1的代码后面获得用户控件中使用的按钮的点击事件。如何在windows phone/silverlight中实现同样的效果。有两种方法, 最简单的方法是双击演示布局上的按钮 或 在XML中添加onCLick= 这样做会弹出菜单选择新事件。点击这个按钮,你的事件按钮点击应该在代码后面 <button name="b1" onClick="button1_C
在我的应用程序中,我有一个页面,比如page1,我在page1中放置了一个用户控件。我的要求是我需要在page1的代码后面获得用户控件中使用的按钮的点击事件。如何在windows phone/silverlight中实现同样的效果。有两种方法, 最简单的方法是双击演示布局上的按钮 或 在XML中添加onCLick= 这样做会弹出菜单选择新事件。点击这个按钮,你的事件按钮点击应该在代码后面
<button name="b1" onClick="button1_Click()"/> <!--this is what ur XAML will look like -->
1.第一个也是正确的方法:
(如果您知道MVVM模式)将由您控制,比如说MyControl
,以公开类型ICommand
的DependencyProperty,名为MyControlButtonClickCommand
Xaml:
您可以按如下方式使用UserControl:
<phone:PhoneApplicationPage>
<namespace:MyControl MyControlButtonClickCommand="{Binding ControlButtonCommand}" />
</phone:PhoneApplicationPage>
其中ControlButtonCommand
是ViewModel(自定义对象)的属性,位于页面的数据上下文中
2.还有一种更简单、更肮脏的方式,我不鼓励你去:
就像您公开MyControlButtonClickCommand
依赖属性一样,您可以公开事件MyControlButtonClick
并在页面的xaml中订阅它,而不是公开它。在用户控件的代码内部,您应该订阅其按钮的单击
事件,并启动自己的mycontrolbutton单击
事件
希望这将对您有所帮助。对于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!!
}
}
要处理按钮单击事件,需要为该按钮注册一个单击事件。上面的方法使用do-so,它将生成一个类似“Button1_clicked()”的存根,在这个方法中,您将处理event@Harshit你不明白他的问题。他想在页面后面的代码中处理用户控件的按钮点击,而不是用户控件本身。@nkchandra好的,我得到了上面发布的答案。我需要这个,请你再添加一些代码,以便我可以遵循你的流程。在何处添加此
如何将viewModel命令绑定到usercontrol的按钮单击?请帮助新加入wpf windows phone。。。
<phone:PhoneApplicationPage>
<namespace:MyControl MyControlButtonClickCommand="{Binding ControlButtonCommand}" />
</phone:PhoneApplicationPage>
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!!
}
}