如何在CustomControl的controltemplate中使用事件?

时间:2018-05-25 13:33:02

标签: wpf

我创建了一个新的CustomControl并重写了controltemplate。

这是controltemplate:

<Style TargetType="{x:Type local:CustomControl1}">        
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:CustomControl1}">
                    <Border >
                        <Grid >
                            <Grid.RowDefinitions>
                                <RowDefinition Height="*"></RowDefinition>
                                <RowDefinition Height="auto"></RowDefinition>
                            </Grid.RowDefinitions>
                            <TextBlock ></TextBlock>
                            <Button Grid.Row="1"></Button>
                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

如您所见,我在ControlTemplate中使用了一个按钮,我想使用此按钮的click事件。但是,视觉工作室似乎禁止我使用它。

PS:我在Generic.xaml中编写了ControlTemplate,当我创建一个新的CustomControl项目时,visual studio自动创建。还有更多,我没有使用英文版Visual Studio,所以我只能告诉你一般意味着Visual Studio所说的,我很抱歉。

如何在controltemplate中使用按钮的click事件?谢谢。

1 个答案:

答案 0 :(得分:1)

您在哪里使用模板定义ResourceDictionary

如果在视图中定义了它,您可以在视图的代码隐藏中定义一个事件处理程序并像往常一样将其挂起。

如果它是在ResourceDictionary中定义的,只要您实际向OnApplyTemplate()添加代码隐藏类,就可以执行相同的操作:

Is it possible to set code behind a resource dictionary in WPF for event handling?

但更好的解决方案是在自定义控件类“public class CustomControl1 : Control { public override void OnApplyTemplate() { base.OnApplyTemplate(); Button btn = GetTemplateChild("btn") as Button; if(btn != null) { btn.Click += Btn_Click; } } private void Btn_Click(object sender, System.Windows.RoutedEventArgs e) { //handle click... } } 方法中连接事件处理程序:

Button

请记住在x:NameControlTemplate <ControlTemplate TargetType="{x:Type local:CustomControl1}"> <Border> <Grid> <Grid.RowDefinitions> <RowDefinition Height="*"></RowDefinition> <RowDefinition Height="auto"></RowDefinition> </Grid.RowDefinitions> <TextBlock ></TextBlock> <Button x:Name="btn" Grid.Row="1"></Button> </Grid> </Border> </ControlTemplate> {/ 1}}:

get_account()