我正在用Silverlight编写一个自定义控件,我在点击Generic.xaml文件时遇到了问题。这不起作用:
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="local:ScrollableTabControl">
<Button Grid.Row="0" Grid.Column="0" x:Name="ScrollLeft" Click="scrollLeft"><</Button>
</ControlTemplate>
</Setter.Value>"ScrollLeft“在我的C#文件中。
然而,这也不起作用:
var b = this.GetTemplateChild("ScrollLeft");
Debug.Assert(b != null);因为无论我做什么,b总是返回null。我觉得应该有一种简单的方法来给这个按钮分配click方法,那么我做错了什么呢?
EDIT:这是我的C#文件中的方法:
public void scrollLeft(object sender, RoutedEventArgs e)
{
//var scroller = Application.Current.Resources["TabScroller"] as ScrollViewer;
//scroller.LineLeft();
}发布于 2011-04-20 02:57:12
您必须覆盖自定义控件类(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"><</Button>
</Border>
</ControlTemplate>
</Setter.Value>
注意:我删除了Click事件处理程序。
发布于 2011-04-20 02:51:36
虽然这是可能的,但我建议使用命令,这样替换模板的设计者就可以自由地选择其他控件和事件来绑定逻辑。
https://stackoverflow.com/questions/5721066
复制相似问题