WPF边境儿童能见度无效

时间:2019-02-27 14:42:18

标签: c# wpf border visibility textblock

我需要隐藏一个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位于容器的可见区域。

1 个答案:

答案 0 :(得分:-1)

首先,我认为您要做的事情是您不应该做的! 但是,这是您可以执行的操作(顺便说一句,假设您仅将边框添加到网格中):

if (myGrid.Children.Count > 5)
{
   (myGrid.Children[myGrid.Children.Count - 6] as Border).Visibility = Visibility.Hidden;
}

我也建议删除不要隐藏该孩子,否则它将毫无意义地保持存在

myGrid.Children.Remove(myGrid.Children[0]);