WPF Border Child可见性无效

问题描述 投票:0回答:1

我需要隐藏一个TextBlock,它是Border的子项,并被添加到Grid中。以下代码动态地将Border和TextBlock添加到Grid。然后,如果网格包含超过5个孩子,它会隐藏第一个孩子。它可以正常隐藏边框,但TextBlock(边框的子项)仍然可见。

知道哪里可能是问题?谢谢!

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工作的方法。所以我放弃了这种方法,如果TextBlock位于容器的可见区域,我只需检查OnRender。

c# wpf border visibility textblock
1个回答
-1
投票

首先,我认为你所做的是你不应该做的事情!但是这里是你可以做到的(顺便说一下,假设你只在你的网格中添加Borders):

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

我也建议删除不要隐藏孩子,因为它将保持存在没有任何意义

myGrid.Children.Remove(myGrid.Children[0]);
© www.soinside.com 2019 - 2024. All rights reserved.