Как показывать события в пользовательских элементах управления Silverlight? - PullRequest
1 голос
/ 09 марта 2011

Я пытаюсь передать событие из дочернего usercontrol его родителю.

Дочерний пользовательский контроль - это кнопка внутри сетки:

<UserControl>
    <Grid>
        <Button Click="Button_Click" />
    </Grid>
</UserControl>

Родительский пользовательский контроль состоит из множества экземпляров дочернего элемента управления:

<UserControl>
    <StackPanel>
        <customs:myButton CustomClick="something" />
        <customs:myButton CustomClick="something" />
        <customs:myButton CustomClick="something" />
        etc.
    </StackPanel>
</UserControl>

В дочернем пользовательском контроле я определил:

    public delegate void CustomClickHandler(object sender, EventArgs e);
    public event CustomClickHandler CustomClick;

и «внутренняя» кнопка обрабатывает событие щелчка следующим образом:

    private void Button_Click(object sender, EventArgs e)
    {
        if (CustomClick != null)
            CustomClick (sender, e);
    }

Я попытался проверить, что происходит, и я вижу, что вызывается Button_Click, CustomClick не равен нулю и выполняется. Однако, похоже, ничего не происходит, код, связанный с этим даже в родительском usercontrol, не вызывается

Есть предложения?

Заранее спасибо, Ура, Джанлука.

Ответы [ 2 ]

0 голосов
/ 09 марта 2011

Хорошо, я разобрался, проблем было немного.

Первая проблема была вызвана IsHitTestVisible. В некоторых сетевых статьях было сказано, что для этого свойства установлено значение false, чтобы решить некоторые проблемы, связанные с событиями мыши. Я так и сделал, но это было неправильно, потому что элемент с этим свойством, установленным в false, «ловил» события мыши, и они больше не поступали во внутренние элементы управления пользователя.

Во-вторых, в самой внутренней кнопке (см. Мой пост выше, чтобы понять сценарий), чтобы заставить это работать, мне пришлось установить ClickMode = "Hover" и обработать событие MouseLeftButtonUp. Я попытаюсь использовать стандартный щелчок, но я где-то читал, что всплывают только определенные события ...

e.Handled не нуждается в каких-либо изменениях: я проверил, и это уже было ложным

Также мне не приходилось использовать какую-либо библиотеку RoutedEvent ...

Я не могу думать ни о чем другом, что сделал для решения проблемы.

Полагаю, это все.

Как всегда, если у вас есть какие-либо предложения, пожалуйста, не стесняйтесь добавлять их здесь.

Ура, Джанлука.

0 голосов
/ 09 марта 2011

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

...