我正在寻找以下情况的解决方案。
在我的应用程序中,我有一个页面说 page1,我在 page1 中放置了一个用户控件。我的要求是我需要在 page1 的代码后面获取用户控件中使用的按钮的单击事件。我如何在 windows phone / silverlight 中实现相同的目标。
我正在寻找以下情况的解决方案。
在我的应用程序中,我有一个页面说 page1,我在 page1 中放置了一个用户控件。我的要求是我需要在 page1 的代码后面获取用户控件中使用的按钮的单击事件。我如何在 windows phone / silverlight 中实现相同的目标。
(如果您知道 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>
ControlButtonCommand
ViewModel(您的自定义对象)的属性在哪里,位于您的Page
.
就像您公开MyControlButtonClickCommand
依赖属性而不是公开它一样,您可以公开一个事件MyControlButtonClick
并在页面的 xaml 中订阅它。在您的 UserControl 代码内部,您应该订阅它的按钮Click
事件并触发它自己的MyControlButtonClick
事件。
希望这会帮助你。
有两种方法可以做到这一点,最简单的方法是双击演示布局上的按钮。
或者
在 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
}
对于 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!!
}
}