单击Generic.xaml中的Button

本文关键字:Button 中的 xaml Generic 单击 | 更新日期: 2023-09-27 17:51:26

我正在Silverlight中编写一个自定义控件,我遇到了让我的按钮单击到通用的问题。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总是返回null。我觉得应该有一个简单的方法来分配这个按钮的点击方法,所以我做错了什么?

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

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

单击Generic.xaml中的Button

你必须在你的自定义控件类(c# File)上重写OnApplyTemplate()

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

另外,您必须在Generic中的控件模板中再做一个更改。

<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事件处理程序。

尽管可能,我还是建议使用Commands,以便替换模板的设计人员可以自由地选择其他控件和事件来绑定逻辑。