如何根据WPF控件的大小更新WPF控件上显示的信息

时间:2014-02-23 11:12:26

标签: c# wpf controls

我正在开发一个基于ContentControl的自定义WPF控件,该控件应该随着其大小的增加而显示更少的重要信息。基本上,控件包含一个网格,当控件具有足够的宽度来显示该信息时,该网格可以包含更多列,否则可以包含更少的列。

因此我需要覆盖一些事件,我想在其中我可以确定控件的实际大小,然后重建其在ContentTemplate中定义的Grid。

所以实际问题是: 我应该覆盖哪个事件来实现这一目标?和 如何获得对DataTemplate中定义的Grid的访问权限?实际上这个听起来有点不对,因为逻辑和UI应该分开,一个应该能够替换整个ControlTemplate而不影响它背后的逻辑......

此致 最大

1 个答案:

答案 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;
}