点击Generic.xaml中的按钮?

时间:2011-04-19 18:40:58

标签: c# silverlight xaml

我正在Silverlight中编写一个自定义控件,我遇到问题让我的Button点击Generic.xaml文件。这不起作用:

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:ScrollableTabControl">
                    <Button Grid.Row="0" Grid.Column="0" x:Name="ScrollLeft" Click="scrollLeft">&lt;</Button>
            </ControlTemplate>
        </Setter.Value>

“ScrollLeft”在我的C#文件中。

然而,这也不起作用:

        var b = this.GetTemplateChild("ScrollLeft");
        Debug.Assert(b != null);

因为无论我做什么,b总是会回来。我觉得应该有一种简单的方法将click方法分配给这个按钮,所以我做错了什么?

编辑:这是我的C#文件中的方法:

    public void scrollLeft(object sender, RoutedEventArgs e)
    {
        //var scroller = Application.Current.Resources["TabScroller"] as ScrollViewer;
        //scroller.LineLeft();
    }

2 个答案:

答案 0 :(得分:2)

您必须覆盖自定义控件类(C#文件)上的 OnApplyTemplate()

喜欢这个。

    public override void OnApplyTemplate()
    {
        Button btn = GetTemplateChild("ScrollLeft") as Button;
        Debug.Assert(btn != null);
    }

此外,您必须在Generic.Xaml中的控件模板中再进行一次更改,如下所示。

<Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:CustomControl1}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <Button Grid.Row="0" Grid.Column="0" x:Name="ScrollLeft">&lt;</Button>
                </Border>
            </ControlTemplate>
        </Setter.Value>

注意:我删除了Click事件处理程序。

答案 1 :(得分:1)

虽然我可以推荐使用命令,但是替换模板的设计者可以自由选择其他控件和事件来绑定逻辑。