Пользовательские события в XAML на моем UserControl на Windows Phone 7
Я делаю UserControl в Windows Phone 7, и я хочу, чтобы, когда пользователь нажимает кнопку Ok, другие XAMLs, которые используют мой UserControl, могли добавить событие, связанное с этим.
используя пример, это выглядит так:
у меня есть файл MainPage.xaml, и я использую свой UserControl там, так что это что-то вроде:
<local:MyUserControl Canvas.Top="0" x:Name="lSelector" Width="480" Height="800" Value="0000"/>
Value-это просто DependencyProperty, который я создал. Я хочу быть в состоянии сделать что-то подобное это:
<local:MyUserControl Canvas.Top="0" x:Name="lSelector" Width="480" Height="800" Value="0000" ValueChanged="lSelector_ValueChanged"/>
Как я могу это сделать?
3 ответов
добавить событие в ваш UserControl как код ниже, и он будет выглядеть как обычное событие
public partial class UserControl1 : UserControl
{
public delegate void ValueChangedEventHandler(object sender, EventArgs e);
public event ValueChangedEventHandler ValueChanged;
public UserControl1()
{
// Required to initialize variables
InitializeComponent();
}
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
if (ValueChanged != null)
{
ValueChanged(this, EventArgs.Empty);
}
}
}
тогда просто подпишитесь на него
private void UserControl1_ValueChanged(object sender, System.EventArgs e)
{
// TODO: Add event handler implementation here.
}
попробуйте использовать DependencyPropertyChangedEventHandler.
Ie.
public event DependencyPropertyChangedEventHandler SelectionChanged
{
add
{
}
remove
{
}
}
таким образом, вы должны увидеть событие выбора изменено в пользовательском элементе управления xaml
использовать RoutedEvent
:
public class Callbackable : ContentControl
{
public static readonly RoutedEvent CommandExecutedEvent = EventManager.RegisterRoutedEvent(
"CommandExecuted", RoutingStrategy.Bubble, typeof(RoutedEventHandler), typeof(Callbackable));
// Provide CLR accessors for the event
public event RoutedEventHandler CommandExecuted
{
add { AddHandler(CommandExecutedEvent, value); }
remove { RemoveHandler(CommandExecutedEvent, value); }
}
}
использование:
<local:Callbackable>
<Button local:Callbackable.CommandExecuted="Button_Executed" >
Click me
</Button>
</local:Callbackable>