假设我有这个XAML代码:
<StackPanel>
<s:SurfaceTextBox Name="A" />
<s:SurfaceTextBox Name="B" />
</StackPanel>
<s:ScatterView>
<s:SurfaceTextBox Name="C" />
<s:SurfaceTextBox Name="D" />
</s:ScatterView>
如何在后面的代码中隐藏所有那些TextBox,解除一个nammed A.
我不是要求这个回应:
B.Visibility = Visibility.Hidden;
C.Visibility = Visibility.Hidden;
D.Visibility = Visibility.Hidden;
我想要一些通用的东西,可以为所有人做这些,而不知道他们的名字?
答案 0 :(得分:1)
你可能会这样做:
public void SetVisibility(UIElement parent)
{
var childNumber = VisualTreeHelper.GetChildrenCount(parent);
for (var i = 0; i <= childNumber - 1; i++)
{
var uiElement = VisualTreeHelper.GetChild(parent, i) as UIElement;
var surfaceTextBox = uiElement as SurfaceTextBox;
// Set your criteria here
if (surfaceTextBox != null && surfaceTextBox.Name != "A")
{
uiElement.Visibility = Visibility.Collapsed;
}
if (uiElement != null && VisualTreeHelper.GetChildrenCount(uiElement) > 0)
{
SetVisibility(uiElement);
}
}
}
为您的根元素命名:
<Grid x:Name="Root">
<StackPanel>
<s:SurfaceTextBox Name="A" />
<s:SurfaceTextBox Name="B" />
</StackPanel>
<s:ScatterView>
<s:SurfaceTextBox Name="C" />
<s:SurfaceTextBox Name="D" />
</s:ScatterView>
</Grid>
然后像这样调用它:
SetVisibility(Root);
答案 1 :(得分:0)
您可以将要隐藏的内容隐藏在网格中,并将网格设置为隐藏。 另一种方法是将您的Visibility绑定到后面的代码中的布尔值或(希望)您的视图模型。 您需要一个BooleanToVisibility类型转换器来完成此操作,但它允许您隐藏绑定到该字段的无限数量的控件。这是一个例子: Visibility Type Converter