C# 如何对模板控件中的按钮单击作出反应

C# 如何对模板控件中的按钮单击作出反应,c#,wpf,C#,Wpf,我编写了一个自定义模板控件,其中包含一个按钮: <ControlTemplate TargetType="local:IncrementalFlipView"> <Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding Bord

我编写了一个自定义模板控件,其中包含一个按钮:

<ControlTemplate TargetType="local:IncrementalFlipView">
    <Border
        Background="{TemplateBinding Background}"
        BorderBrush="{TemplateBinding BorderBrush}"
        BorderThickness="{TemplateBinding BorderThickness}">

        <StackPanel Orientation="Horizontal" Grid.Row="1" HorizontalAlignment="Center">
            <Button Content="^" x:Name="PreviousPageButton" Click="Button_Click"/>
            <TextBlock Text="1" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,0" FontSize="16" />
            <Button Content="v" x:Name="NextPageButton"/>
        </StackPanel>

    </Border>
</ControlTemplate>

知道如何应对点击事件吗?

啊,好吧,我自己解决了。无法将单击的事件传递给基类。但是,当加载模板时,用户可以访问该按钮,并让他订阅单击的事件,如下所示:

protected override void OnApplyTemplate()
{
    Button PreviousPageButton = (Button)GetTemplateChild("PreviousPageButton");
    PreviousPageButton.Click += PreviousPageButton_Click;
}
 <Button Command="{Binding DataContext.BackCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type YourUIType}}}"                                      CommandParameter="{Binding}" />
正确的方法(我的观点)是使用
命令绑定
。 模板控件中的样式化按钮将如下所示:

protected override void OnApplyTemplate()
{
    Button PreviousPageButton = (Button)GetTemplateChild("PreviousPageButton");
    PreviousPageButton.Click += PreviousPageButton_Click;
}
 <Button Command="{Binding DataContext.BackCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type YourUIType}}}"                                      CommandParameter="{Binding}" />
如果您浏览互联网,您将看到
ICommand
界面的基本
RelayCommand
定义(请参见[此处])

然后,您只需定义
Back
方法(它有一个参数化对象):


我认为您应该使用
命令绑定
来比自动订阅事件做得更好。
private void Back(object obj)
{
    // Go back command
    ...
}