Простой вопрос о событии WPF с пользовательским управлением - PullRequest
1 голос
/ 05 октября 2009

Я создаю пользовательскую кнопку под названием «ShardButton», которая использует стиль для управления своим содержимым, а также триггерами событий:

<Style x:Key="ButtonStyle" TargetType="{x:Type obj:ShardButton}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type obj:ShardButton}">
                <Grid>
                    <Path .../>
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
                                      VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
                                      SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" 
                                      RecognizesAccessKey="True"/>
                </Grid>
                <ControlTemplate.Triggers>
                    <EventTrigger RoutedEvent="ButtonBase.Click">
                        !!!SOMETHING HERE!!!
                    </EventTrigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Я использую вышеупомянутый XAML в основном файле Window1.xaml и создаю xmlns для пространства имен "obj", поэтому я хочу вызвать пользовательский метод обработки событий в классе ShardButton, как мне это сделать? что в XAML?

Кажется, я не могу найти правильный способ сформулировать это для поиска в Google ...

Спасибо за любую помощь, которую вы можете мне дать!

Mark

Ответы [ 2 ]

1 голос
/ 05 октября 2009

Вы не можете напрямую выполнять обработчики событий в EventTriggers, они не были созданы для этой цели.

Однако, если каждый экземпляр вашего ShardButton должен выполнять одно и то же при нажатии, просто переопределите метод OnClick в своем классе ShardButton и делайте все, что вам нужно сделать здесь.

Если вы не хотите этого поведения, но вместо этого хотите, чтобы определенный обработчик выполнялся для каждого экземпляра ShardButton, который использует этот конкретный стиль, определенный в Window1.xaml, добавьте еще один установщик:

<Setter Property="Command" Value="{Binding RelativeSource={RelativeSource AncestorType={x:Type obj:Window1}}, Path=MyCommand}" />

Где MyCommand - это свойство экземпляра Window1, возвращающее пользовательскую реализацию ICommand, которая будет вызывать ваш обработчик. В этой строке кода предполагается, что каждая кнопка, использующая этот стиль, находится где-то в визуальном дереве Window1, что, вероятно, должно иметь место (или стиль будет определен в другом месте).

0 голосов
/ 05 октября 2009

Вы можете использовать EventSetter в вашем Style:

<Style ...>
    <EventSetter Event="Click" Handler="yourHandlerMethod"/>
</Style>

Тогда в вашем коде:

private void yourHandlerMethod(object sender, RoutedEventArgs e)
{
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...