这是我的XAML。 UserControl名为“Event”
<UserControl.Resources>
<Style x:Key="eventStyle" TargetType="Thumb">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Thumb}">
<Rectangle Name="rect" Fill="CadetBlue" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
<Canvas>
<Thumb Canvas.Left="0" Canvas.Top="0" Name="MoveThumb" Style="{StaticResource eventStyle}" Cursor="SizeAll" DragDelta="MoveThumb_DragDelta" DragStarted="MoveThumb_DragStarted" DragCompleted="MoveThumb_DragCompleted" />
</Canvas>
这是
背后的代码var ev = new Event();
var rect = ev.Template.FindName("rect", ev) as Rectangle;
但它不起作用:“rect”变量为null。我做错了什么?
由于
答案 0 :(得分:2)
您定义的模板应用于Thumb
控件,而不是Event
控件 - 这就是rect
模板中没有Event
控件的原因。
由于您是从另一个类创建Event
控件,您可以做的是将MoveThumb
控件公开为Event
代码隐藏中的属性,如下所示:
public Thumb TheThumb
{
get { return MoveThumb; }
}
然后您可以将代码更改为:
var ev = new Event();
var rect = ev.TheThumb.Template.FindName("rect", ev.TheThumb) as Rectangle;
更好的是,您可以将rect
控件公开为属性:
public Rectangle Rect
{
get { return MoveThumb.Template.FindName("rect", MoveThumb) as Rectangle; }
}
并像这样使用
var ev = new Event();
var rect = ev.Rect;
答案 1 :(得分:1)