WPF - События внутри пользовательского контроля - PullRequest
3 голосов
/ 21 марта 2011

у нас проблема при попытке создать события для пользовательского элемента управления в WPF.У нас есть код, подобный следующему:


public static readonly RoutedEvent KeyPressedEvent =
            EventManager.RegisterRoutedEvent(
                "keyPressed", RoutingStrategy.Bubble,
                    typeof(KeyEventHandler), typeof(Keyboard));</p>

<pre><code>    public event KeyEventHandler keyPressed
    {
        add { AddHandler(KeyPressedEvent, value); }
        remove { RemoveHandler(KeyPressedEvent, value); }
    }

void btnAlphaClick(object sender, RoutedEventArgs e)
    {
        var btn = (Button)sender;
        Key key = (Key)Enum.Parse(typeof(Key), btn.Content.ToString().ToUpper());
        PresentationSource source = null;
        foreach (PresentationSource s in PresentationSource.CurrentSources)
        {
            source = s;
        }
        RaiseEvent(new KeyEventArgs(InputManager.Current.PrimaryKeyboardDevice, source,0,key));

Элемент управления - это экранная клавиатура, и нам в основном необходимо передать KeyPressedEventArgs, чтобыподписчики на мероприятии подробно рассказывают, какая клавиша была нажата (мы не можем найти много полезного в WPF, только winforms).

Любая помощь, высоко ценится!

1 Ответ

7 голосов
/ 22 марта 2011

Шаг 1: добавление обработчика событий в OK и кнопка отмены

private void btnOK_Click(object sender, RoutedEventArgs e)
{     
}

private void btnCancel_Click(object sender, RoutedEventArgs e)
{     
}

Добавьте публичное свойство в файл UserControl1.xaml.cs, чтобы поделиться значением текстового поля с хостом

public string UserName
{
    get { return txtName.Text; }
    set { txtName.Text = value; }
}

Объявление событий для кнопок «ОК» и «Отмена», которые можно подписать с помощью формы Windows.

public event EventHandler OkClick;
public event EventHandler CancelClick;

Теперь добавьте код в обработчик событий, чтобы мы могли также поднять событие для размещения.

private void btnOK_Click(object sender, RoutedEventArgs e)
{
    if (OkClick != null)
        OkClick(this, e);
}

private void btnCancel_Click(object sender, RoutedEventArgs e)
{
    if (CancelClick != null)
        CancelClick(this, e);
}

Шаг 2. Обработка события управления WPF в форме Windows

Добавление обработчика к OKClick и CancelClick Событиям сразу после создания экземпляра пользовательского элемента управления

_WPFUserControl.OkClick += new EventHandler(OnOkHandler);
_WPFUserControl.CancelClick += new EventHandler(OnCancelHandler);

Написать код в методе обработчика. Здесь я использую свойство UserName в обработчике кнопки OK, поэтому покажу, как делиться значениями.

protected void OnOkHandler(object sender, EventArgs e)
{
    MessageBox.Show("Hello: " +_WPFUserControl.UserName + " you clicked Ok Button");
}

protected void OnCancelHandler(object sender, EventArgs e)
{
    MessageBox.Show("you clicked Cancel Button");
}

Ссылка: http://a2zdotnet.com/View.aspx?Id=79

...