我正在寻找以下情况的解决方案。
在我的应用程序中,我有一个页面说page1,我在page1中放置了一个用户控件。我的要求是我需要在page1的代码后面的用户控件中使用按钮的click事件。我如何在windows phone / silverlight中实现同样的目标。
答案 0 :(得分:14)
(如果您了解MVVM模式)将由您控制,例如MyControl
,以公开类型为ICommand
的DependencyProperty,例如, MyControlButtonClickCommand。
的Xaml:
<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
的DataContext中。
就像你公开MyControlButtonClickCommand
依赖属性而不是暴露它一样,你可以公开一个事件MyControlButtonClick
并在页面的xaml订阅它。在UserControl的代码内部,您应该订阅它的按钮的Click
事件并触发其自己的MyControlButtonClick
事件。
希望这会对你有所帮助。
答案 1 :(得分: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
}
答案 2 :(得分: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!!
}
}