2016-06-06 56 views
-1

特定的項目我有這樣一個列表框象下面這樣:如何設置複選框在列表框在列表框C#WPF

<ListBox x:Name="listBox" HorizontalAlignment="Left" Height="385" Margin="21,138,0,0" VerticalAlignment="Top" Width="273" ItemsSource="{Binding Path=locationList}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Button Name="btnDelete" Click="btnDelete_Click" Width="15" Height="15" HorizontalAlignment="Center" VerticalAlignment="Center" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Content="x" /> 
        <CheckBox Name="checkBox" /> 
        <TextBlock Name="textBox" Text="{Binding}"/> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

而我想要做的是設置特定項目這個列表框複選框。

我試圖做到這一點:

private void button4_Click(object sender, RoutedEventArgs e) 
    { 
     for(int i = 0; i < listBox.Items.Count; i++) 
     { 
      listBox.Items[i].checkBox = false; 
     } 
    } 

我知道我在做一個錯誤。我想將它轉換爲項目的對象,然後將項目的屬性(此複選框)設置爲false。任何人都可以糾正我?先謝謝你。

編輯

之前,我試圖做這樣說:

 foreach (var item in listBox.SelectedItems) 
     { 
      item. 
     } 

,但我有所有的可能性都只是標準方法:等於,GetHashCode的,的GetType,...的ToString我如何參考複選框?

此外,我會提供我的問題與洞察力。我想通過列表框(項目)中的文本找到一個特定項目,然後更改此項目的複選框(列表框中的同一行)。 要實現的第二個邏輯是將所有行設置爲選中狀態或未選中狀態(這正是我現在要做的)。

感謝您的回覆。

+0

列表框,你應該改變你的循環使用foreach例如 'foreach(var listBox.SelectedItems中的項目)'類似的東西.. – MethodMan

+0

謝謝你的時間:)我已編輯帖子作爲你的答案。 –

+0

http://www.c-sharpcorner.com/forums/how-to-uncheck-checked-items-in-a-checkedlistbox – MethodMan

回答

3
 for (int i = 0; i < listBox.Items.Count; i++) 
     { 
      var item = listBox.ItemContainerGenerator.ContainerFromItem(listBox.Items[i]) as ListBoxItem; 
      var template = item.ContentTemplate as DataTemplate; 

      ContentPresenter myContentPresenter = FindVisualChild<ContentPresenter>(item); 

      CheckBox myCheckBox = (CheckBox)template.FindName("checkBox", myContentPresenter); 

      myCheckBox.IsChecked = true; 
     } 

同樣,你可以找到與TextBlock的(注意,你把它命名爲 「的textBox」 而不是 「文字塊」)

  TextBlock myTextBlock = (TextBlock)template.FindName("textBox", myContentPresenter); 

FindVisualChild可以在這裏找到FindVisualChild reference issue

+0

嘿,這就像一個魅力:)直到第21條總是引起錯誤的消息:「對象引用沒有設置爲一個對象的實例。」。 作爲我的itemSource我有列表。 21項不是特別的,沒有特殊字符或任何東西。我正在考慮爲此編寫一個小模型,一個包含我的字符串和布爾的類,或者將它作爲List >。順便說一下,你有一個想法,爲什麼這個例外發生?無論如何,你的建議很棒。它解釋了我一些wpf的複雜性。 –

+1

@jankowalski問題是第21項尚未創建。您可以通過滾動到最後一個項目來創建它。或者將其添加到您的ListBox VirtualizingPanel.IsVirtualizing =「False」。 – user2880486

+0

我對你對WPF的認識印象深刻。我祝你一切順利。非常感謝你幫助我解決這個問題。 –