从ListBox更改面板

时间:2014-03-03 16:57:48

标签: c# listbox panel

编辑编辑:我发现了问题。我们把:在案件和价值之间,它需要在之后。例如:案例“一般”:

感谢您的时间并投入所有人。

原件:

这比我试图制作它要简单得多。简单地说,我有一个列表框,说... 6个不同的“项目”(一般/ oSnaps / blah / blah / blah),当有人点击列表框中的一个项目时,我希望它更改面板。我有6个不同的面板(panel1,panel2等)堆叠在一起,在加载时只有第一个设置为可见。

我确定这只是设置哪个Panel可见,但我如何将其实际链接到列表框中的“项目”? SelectedIndexChanged是我认为的答案,但我对编程非常新。

MSDN仅演示如何在不同列表框中的项目之间切换。

任何帮助都将不胜感激。

编辑:这是我当前的代码

private void listBox1_SelectedIndexChanged(object sender,System.EventArgs e) {

           string curItem = listBox1.SelectedItem.ToString(); 

           curItem = listBox1.SelectedItem.ToString(); 
            MessageBox.Show(curItem);

           switch(curItem)
        {
        case : "General"   //error here is: Only assignment, call,increment,await,and new object expressions can be used as a statement
        panel1.Visible = false;
        panel2.Visible = true;
        break;
        case : "E-Snaps" // same as above
        panel2.Visible = false;
        panel3.Visible = true;
        break;
        case : "blah" // same as above
        panel3.Visible = false;
        panel4.Visible = true;
        }
        }

单击listBox中的不同项目会显示一个包含正确内容的消息框(General / E-Snaps / blah / etc)。所以它显然在阅读它,我们如何让它现在切换面板?

我不应该也能做这样的事吗?

private void listBox1_SelectedIndexChanged(object sender,System.EventArgs e) {

           string curItem = listBox1.SelectedItem.ToString();

           curItem = listBox1.SelectedItem.ToString();

            if curItem = "General"
            {
                panel1.Visible = true;
            }

}

不是说我可以上班......但这看似合乎逻辑。如果我能得到某种形式的字符串/布尔转换...

2 个答案:

答案 0 :(得分:1)

您可以在selectedindex已更改

上使用switch语句开始

所以看起来像这样

private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
    // Get the currently selected item in the ListBox. 
    string curItem = listBox1.SelectedItem.ToString();

    switch(curItem)
    {
        case "blah": 
            panel1.visible = false;
            panel2.visible = true;
            break;
        case "blah": 
            panel2.visible = false;
            panel3.visible = true;
            break;
        case "blah": 
            panel3.visible = false;
            panel4.visible = true;
            break;
    }
}

等等,我希望这有帮助

说明:“blah”是你想要评估的价值,所以如果我正在做水果

“等等”会=苹果 或者bannana或菠萝等

答案 1 :(得分:1)

我会在绑定中使用IValueConverter - 这样可以将每个面板的可见性直接绑定到ListBox.SelectedIndex

<Grid>
    <Grid.Resources>
        <local:IndexToVisibilityConverter x:Key="IndexToVisibilityConverter" />
    </Grid.Resources>
    <ListBox x:Name="listBox"> ... </ListBox>

    <Border x:Name="panel1" 
            Visibility="{Binding ElementName=listBox,
                                 Path=SelectedIndex,
                                 Converter={StaticResource IndexToVisibilityConverter}
                                 ConverterParameter='0'}"
    />
    <Border x:Name="panel2" 
            Visibility="{Binding ElementName=listBox,
                                 Path=SelectedIndex,
                                 Converter={StaticResource IndexToVisibilityConverter}
                                 ConverterParameter='1'}"
    />
</Grid>

如果索引与参数匹配,“IndexToVisibilityConverter”应返回“Visibility.Visible”:

public class IndexToVisibilityConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ((int)value == int.Parse((string)parameter) ? Visibility.Visible : Visibility.Collapsed);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

或者,请注意,如果您想使用过渡(如交叉淡入淡出,滑入/滑出等),那么您可能希望在SelectionChanged事件上使用事件触发器,以及故事板或VisualState更改。