2014-03-04 34 views
0

昨天我們想出瞭如何獲取列表框的內容,以便在不同的面板之間切換,而這些面板之間已經堆疊在一起。這次我試圖在WPF中做同樣的事情,顯然語法是不同的。該代碼在Windows窗體中正確工作了100%。我嘗試了幾種不同的方法來嘗試獲取現在的「網格」來展示,但無濟於事。
在此先感謝!將窗體的「開關」更改爲WPF

當前代碼'嘗試'。我只是展示了一些我試圖在第一個「案例」中更改代碼的方法。

private void listBox1_SelectedIndexChanged(object sender, SelectionChangedEventArgs e) 
    { 

     // set the listboxselected item to a string variable 
     string curItem = listBox1.SelectedItem.ToString(); 
     curItem = listBox1.SelectedItem.ToString(); 

     // variable changes depening on mouse click, sets to whichever string value is selected 
     switch (curItem) 
     { 
      case "General": 
       gridGeneral.Visibility == true; 
       gridRightClick.Visibility = Visibility.Visible; 
       gridSnaps.Visibility = Visibility.Hidden; 
       break; 
      case "E-Snaps": 
       gridGeneral.Visibility = Visibility.Hidden; 
       gridRightClick.Visibility = Visibility.Hidden; 
       gridSnaps.Visibility = Visibility.Visible; 
       break; 
      case "Mouse": 
       gridGeneral.Visibility = Visibility.Hidden; 
       gridRightClick.Visibility = Visibility.Visible; 
       gridSnaps.Visibility = Visibility.Hidden; 
       break; 

     } 

下面是在視窗形式

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

  // set the listboxselected item to a string variable 
      string curItem = listBox1.SelectedItem.ToString(); 
      curItem = listBox1.SelectedItem.ToString(); 

      // variable changes depening on mouse click, sets to whichever string value is selected 
      switch(curItem) 
     { 
       case "General" : 
      panel1.Visible = false; 
      panel2.Visible = true; 
      panel3.Visible = false; 
      panel4.Visible = false; 
      panel5.Visible = false; 
      break; 

等等等等等等....

工作的代碼
+0

您需要包含網格的XAML。 – EkoostikMartin

+0

這是我嘗試創建的第一個WPF ...我不知道這意味着什麼。 – smakfactor1

+0

http://msdn.microsoft.com/en-us/library/ms752059(v=vs.110).aspx – EkoostikMartin

回答

1

你不會這樣做WPF中的相同方式,你會在WinForms中

在WPF中,你可能會在WPF其中的WinForms,你有3個控制用來渲染根據你的ListBox的SelectedItem將改變單一的控制,以及模板

最有可能的控制定義的外觀這樣的事情,所以它的內容被綁定到ListBox.SelectedItem

<ContentControl Content="{Binding ElementName=listBox1, Path=SelectedItem}" /> 

而且你既可以使用ContentTemplatesDataTemplates告訴WPF如何繪製ContentControl中的的ContentTemplate。

如果SelectedItem是一個自定義類,DataTemplate可能會更容易,但是由於在您的示例中它是一個字符串,ContentTemplate可能會更好。

下面是該改變基於內容的價值ContentTemplate屬性,用於ContentControl風格的例子

<Style TargetType="{x:Type ContentControl}"> 
    <!-- // Default Template --> 
    <Setter Property="ContentTemplate" Value="{StaticResource GeneralTemplate}" /> 

    <!-- // Change template depending on a property --> 
    <Style.Triggers> 
     <Trigger Property="Content" Value="ESnaps"> 
      <Setter Property="ContentTemplate" Value="{StaticResource ESnapsTemplate}" /> 
     </Trigger> 
     <Trigger Property="Content" Value="Mouse"> 
      <Setter Property="ContentTemplate" Value="{StaticResource MouseTemplate}" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

(也許是我的語法的準確結合,你需要什麼錯在這裏...會可能需要一些測試)

+0

感謝您的時間和精力! :) – smakfactor1