【发布时间】:2014-03-27 10:54:19
【问题描述】:
我已经将RowDefinition 扩展为RowDefinitionExtended,并且我什么时候可以得到属于这个RowDefinition 的LogicalChildren。我的意思是我可以在哪个覆盖中获得LogicalChildren?
public class RowDefinitionExtended : RowDefinition
{
protected override void OnInitialized(EventArgs e)
{
base.OnInitialized(e);
Loaded += OnRowDefinitionExtendedLoaded;
}
void OnRowDefinitionExtendedLoaded(object sender, RoutedEventArgs e)
{
var parent = GetUIParentCore() as Grid;
if (parent == null) return;
if (parent.Children.Cast<UIElement>().Where(c => Grid.GetRow(c) == parent.RowDefinitions.IndexOf(this)).All(ctrl => ctrl.Visibility != Visibility.Visible))
Height = new GridLength(0);
}
}
我的要求是,我需要检查所有LogicalChildren 到它的Visibility 并相应地更改它的Height。
我怎么能这样做?任何想法?
更新:
代码已更新,在加载时我可以这样做并且效果很好。但我的问题是,加载后正在更改控件的可见性......那么在更改可见性时是否有任何通知?当布局更新时,我正在寻找一个事件..
我可以在任何活动中使用它吗?
【问题讨论】:
-
您希望 RowDefinition 的 LogicalChildren 集合中包含什么?至少,Grid 的子元素不是 RowDefinition 的子元素。
-
您可以将 RowDefinition 的初始高度设置为
Auto。当该行中所有 Grid 子项的 Visibily 更改为Collapsed时,该行将自动消失。 -
@Clemens:我有一些情况可以将可见性设置为隐藏..
-
好的,您可以订阅特定行中每个孩子的 IsVisibleChanged 事件。
标签: wpf rowdefinition