我正在开发一个基于ContentControl的自定义WPF控件,该控件应该随着其大小的增加而显示更少的重要信息。基本上,控件包含一个网格,当控件具有足够的宽度来显示该信息时,该网格可以包含更多列,否则可以包含更少的列。
因此我需要覆盖一些事件,我想在其中我可以确定控件的实际大小,然后重建其在ContentTemplate中定义的Grid。
所以实际问题是: 我应该覆盖哪个事件来实现这一目标?和 如何获得对DataTemplate中定义的Grid的访问权限?实际上这个听起来有点不对,因为逻辑和UI应该分开,一个应该能够替换整个ControlTemplate而不影响它背后的逻辑......
此致 最大
答案 0 :(得分:0)
当您提出这些具体问题时,您应该考虑向我们发送更多代码。
我应该覆盖哪个事件来实现这个目标?
您似乎在询问SizeChanged事件:
http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.sizechanged(v=vs.110).aspx
任何FE(FrameworkElement)都有它,因此您可以订阅它。
如何获得对DataTemplate中定义的网格的访问权限?
为了在模板中找到某些内容,您可以遵循以下建议:
this.Template.FindName("theScrollViewer", this) as ScrollViewer
在我的例子中,我寻找一个名为theScrollViewer
的元素修改强>
这里有一个很好的解释:
http://msdn.microsoft.com/en-us/library/bb613586(v=vs.110).aspx
<强> EDIT2:强>
[TemplatePart(Name =“PART_ContentHost”,Type = typeof(FrameworkElement))]
TemplatePart只是visual studio将用于向您展示如何为模板内的控件命名的属性。
这种方法和我上面给你的做法一样。
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
anchor = Template.FindName("PART_ContentHost", this) as FrameworkElement;
}