C# 每次单击按钮后更改图元的可见性

C# 每次单击按钮后更改图元的可见性,c#,xaml,windows-phone-8.1,C#,Xaml,Windows Phone 8.1,我有一组XAML元素,如下所示: <ComboBox x:Name="comB1" HorizontalAlignment="Left" Margin="244,90,0,0" VerticalAlignment="Top" Width="130" Height="48" Visibility="Collapsed"> <ComboBox x:Name="comB2" HorizontalAlignment="Left" Margin="244,180,0,0" Vertica

我有一组XAML元素,如下所示:

<ComboBox x:Name="comB1" HorizontalAlignment="Left" Margin="244,90,0,0" VerticalAlignment="Top" Width="130" Height="48" Visibility="Collapsed">
<ComboBox x:Name="comB2" HorizontalAlignment="Left" Margin="244,180,0,0" VerticalAlignment="Top" Width="130" Height="48" Visibility="Collapsed">
<ComboBox x:Name="comB3" HorizontalAlignment="Left" Margin="244,270,0,0" VerticalAlignment="Top" Width="130" Height="48" Visibility="Collapsed">


<Button Content="+" HorizontalAlignment="Left" Margin="171,224,0,0" VerticalAlignment="Top" Height="51" Width="59" Click="Button_Click"/>

每次单击此
+
按钮后,我想将一个
组合框的
可见性
更改为
可见

--在类的作用域中声明变量

int numOfVisibleCbx = 0;
int numOfVisibleCbx = 0;
--点击按钮

if(numOfVisibleCbx == 0)
      comB1.Visibility = Visibility.Visible;
else if(numOfVisibleCbx == 1)
      comB2.Visibility = Visibility.Visible;
else if(numOfVisibleCbx == 2)
      comB3.Visibility = Visibility.Visible;

numOfVisibleCbx++;
hideAll();
if(numOfVisibleCbx == 0)
      comB1.Visibility = Visibility.Visible;
else if(numOfVisibleCbx == 1)
      comB2.Visibility = Visibility.Visible;
else if(numOfVisibleCbx == 2){
      comB3.Visibility = Visibility.Visible; 
      numOfVisibleCbx = 0;
}
numOfVisibleCbx++;

如果您想隐藏其他cbx,那么

这里有一个技巧:

--在类的作用域中声明变量

int numOfVisibleCbx = 0;
int numOfVisibleCbx = 0;
--作用

void hideAll()
{
     comB1.Visibility = Visibility.Hidden;
     comB2.Visibility = Visibility.Hidden;
     comB3.Visibility = Visibility.Hidden;
}
--点击按钮

if(numOfVisibleCbx == 0)
      comB1.Visibility = Visibility.Visible;
else if(numOfVisibleCbx == 1)
      comB2.Visibility = Visibility.Visible;
else if(numOfVisibleCbx == 2)
      comB3.Visibility = Visibility.Visible;

numOfVisibleCbx++;
hideAll();
if(numOfVisibleCbx == 0)
      comB1.Visibility = Visibility.Visible;
else if(numOfVisibleCbx == 1)
      comB2.Visibility = Visibility.Visible;
else if(numOfVisibleCbx == 2){
      comB3.Visibility = Visibility.Visible; 
      numOfVisibleCbx = 0;
}
numOfVisibleCbx++;
int-ComboNO=0;
私有无效按钮\u单击(对象发送者,System.Windows.RoutedEventArgs e)
{
ComboNO++;
for(int i=0;i
此解决方案适用于任何数量的
组合框。试试这个:

int num = 1;

private void Button_Click(object sender, RoutedEventArgs e)
{
    if (num <= ComboCounts)//ComboCounts is count of your ComboBoxes
    {
        ((ComboBox)this.FindName("comB" + num)).Visibility = Visibility.Visible;
        num++;
    }
}
int num=1;
私有无效按钮\u单击(对象发送者,路由目标e)
{
如果(num尝试一下:

    public MainWindow()
    {
        InitializeComponent();
        _comBs =
            this
                .Root
                .Children
                .OfType<ComboBox>()
                .Where(x => x.Name.StartsWith("comB"))
                .OrderBy(x => int.Parse(x.Name.Substring("comB".Length)))
                .ToArray();
    }

    private ComboBox[] _comBs = null;
    private int _comB_index = -1;

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        _comB_index++;
        for (var i = 0; i < _comBs.Length; i++)
        {
            _comBs[i].Visibility = i == _comB_index % _comBs.Length
                ? Visibility.Visible
                : Visibility.Collapsed;
        }
    }
public主窗口()
{
初始化组件();
_梳子=
这
根
儿童
第()类
.Where(x=>x.Name.StartsWith(“梳”))
.OrderBy(x=>int.Parse(x.Name.Substring(“comB.Length”))
.ToArray();
}
专用组合框[]_comBs=null;
私有int_comB_索引=-1;
私有无效按钮\u单击(对象发送者,路由目标e)
{
_comB_索引++;
对于(变量i=0;i<\u梳长度;i++)
{
_梳[i]。可见性=i==\u梳\u索引%\u梳.Length
?可视性。可见
:能见度。倒塌;
}
}
您必须用容器元素替换
this.Root


我已经测试过这个解决方案,它很有效。

你想每次更改同一个组合框的可见性,还是显示不同的组合框?你能澄清一下你是想让一个组合框可见,但隐藏以前的组合框,还是依次让每个组合框可见吗?是的,这很好。但是如果有30个组合框,我就必须写60-70行。有可能吗易变的answers@Mr.lock-您需要在问题中包含此详细信息。当然,如果有许多组合框,那么这将是一个问题,但哪里有问题,那么也有一个解决方案。我们可以做的是在“+”上创建一个包装面板并在其中动态添加组合框单击。此外,您可以将这些组合框的引用存储在列表中,这样,如果您需要对它们进行操作,就可以很容易地完成操作。这个“RootElement”@Mr.lock是什么?它应该是包含组合框的任何元素。