我需要隐藏一个TextBlock,它是Border的子元素并被添加到Grid中。下面的代码将Border和TextBlock动态添加到网格中。然后,如果Grid包含5个以上的子代,则将第一个子代隐藏。可以正确隐藏边框,但是TextBlock(Border的子级)仍然可见。
任何想法可能出在哪里?谢谢!
Border TextBorder = new Border();
TextBorder.BorderBrush = new SolidColorBrush(_settings.TextColor);
TextBorder.BorderThickness = new Thickness(0,0,0,2);
TextBorder.Padding = new Thickness(0, 10, 0, 10);
RowDefinition rd = new RowDefinition();
rd.Height = GridLength.Auto;
myGrid.RowDefinitions.Add(rd);
TextBlock uc = new TextBlock();
uc.Text = "Test";
TextBorder.Child = uc;
Grid.SetRow(TextBorder, myGrid.RowDefinitions.Count -1);
myGrid.Children.Add(TextBorder);
if (myGrid.Children.Count > 5)
{
Border border = (Border)myGrid.Children[myGrid.Children.Count - 6];
border.Visibility = Visibility.Hidden;
border.Child.Visibility = Visibility.Hidden;
}
更新
代码正常工作。问题出在TextBlock的OnRender事件中,该事件以某种图形效果绘制文本。我虽然说如果控件不可见,则不应引发OnRender,但它暗示在控件不可见时也应引发它。我还没有找到防止OnRender升高的方法,也没有找到ClipToBound或Invisible工作的方法。因此,我放弃了这种方法,只检查了OnRender是否TextBlock位于容器的可见区域。
答案 0 :(得分:-1)
首先,我认为您要做的事情是您不应该做的! 但是,这是您可以执行的操作(顺便说一句,假设您仅将边框添加到网格中):
if (myGrid.Children.Count > 5)
{
(myGrid.Children[myGrid.Children.Count - 6] as Border).Visibility = Visibility.Hidden;
}
我也建议删除不要隐藏该孩子,否则它将毫无意义地保持存在
myGrid.Children.Remove(myGrid.Children[0]);