0

假设我有这个 XAML 代码:

<StackPanel>
    <s:SurfaceTextBox Name="A" />
    <s:SurfaceTextBox Name="B" />
</StackPanel>

<s:ScatterView>
    <s:SurfaceTextBox Name="C" />
    <s:SurfaceTextBox Name="D" />
</s:ScatterView>

我怎样才能在后面的代码中隐藏所有这些文本框,除了名为 A.

我不是要求这个回应:

B.Visibility = Visibility.Hidden;
C.Visibility = Visibility.Hidden;
D.Visibility = Visibility.Hidden;

我想要一些通用的东西,它可以为所有人做,而不知道他们的名字?

4

2 回答 2

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);
于 2012-07-11T15:59:30.580 回答
0

您可以将想要隐藏的那些放在网格中并将网格设置为隐藏。另一种方法是将您的 Visibility 绑定到您的代码后面或(希望)您的视图模型中的布尔值。您需要一个 BooleanToVisibility 类型转换器来完成此操作,但它允许您隐藏绑定到该字段的无限数量的控件。这是一个例子: 可见性类型转换器

于 2012-07-11T15:46:34.690 回答