2012-06-18 21 views
0

这是我的XAML。该用户控件被命名为“事件”无法访问控制模板的内容

<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”变量为空。我究竟做错了什么 ?

由于

+0

伊万嗨 有没有异常消息。 “rect”仍然为空,无一例外。 – Harkonnen

+0

你什么时候这样做?你确定模板已经被应用了吗? – GazTheDestroyer

+0

我从一个名为Scheduler的类创建此事件。当我点击一个按钮时,我创建了这个事件,将它添加到调度器的事件列表中并绘制它。我用于创建事件的代码是上面的两行。 该模板已应用,因为我的矩形具有AliceBlue的颜色。我想要的是根据事件的性质改变颜色。这就是为什么我想访问矩形。 – Harkonnen

回答

1

它退回因为函数FindName(“控件名称”,TemplatedParent)期望在其上的模板被施加作为第二个参数的控制。从您提供的代码中,我无法看到模板何时应用于控件(ev用于默认模板)。因此,rect变量为null。

试试这个

var rectangle = MoveThumb.Template.FindName("rect", MoveThumb) as Rectangle; 

更多信息,请herehere

+0

同样的事情。矩形仍然为空......我不明白 – Harkonnen

+0

我已经复制了您的代码,并使用VS 2010/.Net 4检查了我的代码。矩形实例不为空! –

+0

我忘了提一件事:我从另一个班级创建活动。见上面的评论。 – Harkonnen

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; 
+0

谢谢你的回答。它是以同样的方式......但仍然是空的!这两个解决方案都给了我的矩形变量null。无法确定发生了什么。我创建了一个测试项目,它的工作原理...我不明白 – Harkonnen

+0

我刚刚注意到一件事:它第二次运行!如果我开始一个调试会话,那么我会观察rect的值,第一次停在断点处时它是空的。但是,在同一个调试会话中,第二次停止在断点处时,rect不为空! WTF? – Harkonnen