Пользовательские события в 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);
          }
       }
   }

Custom event

тогда просто подпишитесь на него

   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>