2014-03-03 65 views
1

編輯:我想出了問題。我們在案件和價值之間放置:它需要在之後。例如:case「General」:面板從列表框中更改

感謝您的時間和每個人的意見。

原文:

這有可能是很多更簡單的比我試圖做到這一點。簡單地說,我有一個列表框,說... 6個不同的「項目」(一般/ oSnaps /等等/等等/等等),當有人點擊列表框中的其中一個項目時,我希望它更改面板。我有6個不同的面板(面板1,面板2等)堆疊在一起,只加載第一個設置爲可見。

我確定這只是設置哪個面板可見的問題,但我如何將它鏈接到列表框中的「項目」? SelectedIndexChanged是我所設想的答案,但我對編程非常陌生。

MSDN只演示如何在不同列表框中的項目之間切換。

任何幫助,將不勝感激。

編輯:這裏是我當前的代碼

私人無效listBox1_SelectedIndexChanged(對象發件人,發送System.EventArgs){

  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 /等)。所以它顯然是在讀它,我們現在怎麼讓它切換面板?

我不應該能夠做到這樣嗎?

私人無效listBox1_SelectedIndexChanged(對象發件人,發送System.EventArgs){

  string curItem = listBox1.SelectedItem.ToString(); 

      curItem = listBox1.SelectedItem.ToString(); 

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

}

不,我可以得到任何工作...但它似乎是合乎邏輯。如果我能得到某種形式的字符串/布爾轉換去的......

回答

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; 
    } 
} 

等啓動對,我希望這有助於

解釋:「嗒嗒」是什麼都看重你想EVAL所以如果我是做水果

「嗒嗒」會=蘋果 或bannana或菠蘿等

+0

所以......你說我要等等到=爲準列表框項目爲當前選中? – smakfactor1

+0

沒錯基本上它正是 –

+0

是啊.. 。我怎麼能做到這一點?我想我很困惑,因爲它似乎沒有我可以調用列表框中的每個不同的項目。我想能夠抓住listboxitem1或lis tboxitem2等改變「等等」到我實際上(通用/ oSnaps /等)沒有做任何事情。 – smakfactor1

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」應返回「可見性。可見」如果指數匹配參數:

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沿。

+0

感謝您的代碼,但這對我來說絕對是先進的。如果我有名譽,我會投票給你:( – smakfactor1