C# Can';t从代码隐藏访问ControlTemplate的内容
这是我的XAML。UserControl名为“事件” 但它不起作用:“rect”变量为null。我做错了什么C# Can';t从代码隐藏访问ControlTemplate的内容,c#,wpf,xaml,C#,Wpf,Xaml,这是我的XAML。UserControl名为“事件” 但它不起作用:“rect”变量为null。我做错了什么 谢谢它返回了null,因为函数FindName(“controlName”,TemplatedParent)需要一个控件,模板将作为第二个参数应用于该控件。从您提供的代码中,我看不到模板何时应用于控件(ev用于默认模板)。因此,rect变量为空 试试这个 var rectangle = MoveThumb.Template.FindName("rect", MoveThumb) as R
谢谢它返回了null,因为函数FindName(“controlName”,TemplatedParent)需要一个控件,模板将作为第二个参数应用于该控件。从您提供的代码中,我看不到模板何时应用于控件(ev用于默认模板)。因此,rect变量为空 试试这个
var rectangle = MoveThumb.Template.FindName("rect", MoveThumb) as Rectangle;
更多信息可用,它返回了null,因为函数FindName(“controlName”,TemplatedParent)需要一个控件,模板将作为第二个参数应用于该控件。从您提供的代码中,我看不到模板何时应用于控件(ev用于默认模板)。因此,rect变量为空 试试这个
var rectangle = MoveThumb.Template.FindName("rect", MoveThumb) as Rectangle;
更多信息可用,您定义的模板应用于
Thumb
控件,而不是事件
控件-这就是事件
的模板中没有rect
控件的原因
由于您是从另一个类创建事件
控件,因此可以将MoveThumb
控件作为事件
的代码隐藏中的属性公开,如下所示:
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;
您定义的模板应用于
Thumb
控件,而不是事件
控件-这就是事件
的模板中没有rect
控件的原因
由于您是从另一个类创建事件
控件,因此可以将MoveThumb
控件作为事件
的代码隐藏中的属性公开,如下所示:
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;
嗨,伊万,没有例外消息。“rect”仍然为空,没有例外。您什么时候执行此操作?您确定已应用模板吗?我从名为Scheduler的类创建此事件。当我点击一个按钮时,我创建了这个事件,将它添加到调度器的事件列表中并绘制它。我用于创建事件的代码是上面的两行。将应用该模板,因为我的矩形具有AliceBlue颜色。我想要的是根据事件的性质改变颜色。这就是我想访问矩形的原因。嗨,伊万,没有异常消息。“rect”仍然为空,没有例外。您什么时候执行此操作?您确定已应用模板吗?我从名为Scheduler的类创建此事件。当我点击一个按钮时,我创建了这个事件,将它添加到调度器的事件列表中并绘制它。我用于创建事件的代码是上面的两行。将应用该模板,因为我的矩形具有AliceBlue颜色。我想要的是根据事件的性质改变颜色。这就是为什么我想访问矩形。同样的事情。rect仍然为空。。。我不明白,我复制了你的代码,并使用VS 2010/.Net 4检查了我的代码。矩形实例不为空!!!!有一件事我忘了提:我从另一个类创建事件。见上面的评论。同样的事情。rect仍然为空。。。我不明白,我复制了你的代码,并使用VS 2010/.Net 4检查了我的代码。矩形实例不为空!!!!有一件事我忘了提:我从另一个类创建事件。见上面的评论。谢谢你的回答。也是这么做的。。。但仍然无效!两种解决方案都为我的rect变量指定了null。不知道发生了什么事。我创建了一个测试项目,它可以工作。。。我不明白,我只是注意到一件事:它第二次起作用!如果我启动一个调试会话,然后我观察rect的值,当我第一次在断点上停止时它是null。但是,在同一个调试会话中,当我第二次在断点上停止时,rect不为null!WTF?谢谢你的回答。也是这么做的。。。但仍然无效!两种解决方案都为我的rect变量指定了null。不知道发生了什么事。我创建了一个测试项目,它可以工作。。。我不明白,我只是注意到一件事:它第二次起作用!如果我启动一个调试会话,然后我观察rect的值,当我第一次在断点上停止时它是null。但是,在同一个调试会话中,当我第二次在断点上停止时,rect不为null!世界跆拳道联盟?