2015-12-11 50 views
0

在我的WPF桌面應用程序中,我有一個ListBox,我想用兩行和兩列(即2x2網格)顯示,並在四行/列中的每一箇中都帶有複選框 - 我的XAML代碼位於下方。請注意,我不想執行任何數據綁定。下面的代碼可以工作,但是顯示的是所有四個CheckBox都是正確的,即使我已經指定它們應該在不同的行/列中。有人能指出我做錯了什麼,以及如何糾正XAML?我在互聯網上找到的每個例子都是一個數據綁定的例子,這需要沒有數據綁定(即明確的)。如何將複選框放在WPF中ListBox的不同行/列中?

<ListBox Margin="0,0,10,10" Name="myListBox" Height="139" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="112" > 
    <ListBox.ItemsPanel> 
    <ItemsPanelTemplate> 
     <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="50"/> 
      <ColumnDefinition Width="50"/> 
     </Grid.ColumnDefinitions> 
     </Grid> 
    </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 

    <CheckBox Content="WCF" Grid.Row="0" Grid.Column="0"/> 
    <CheckBox Content="ASP.NET" Grid.Row="0" Grid.Column="1"/> 
    <CheckBox Content="Java" Grid.Row="1" Grid.Column="0"/> 
    <CheckBox Content="C+" Grid.Row="1" Grid.Column="1"/> 
</ListBox> 
+0

恐怕你不能這樣做,沒有約束力。 'ListBox'將項目包裝在'ListBoxItem'中,它變成'ItemsPanel'的直接子項,並且你可以通過綁定在'ItemsContainerStyle'中設置'Grid.Column'和/或'Grid.Row' – dkozl

+0

謝謝。我使用ListBox是因爲它可以滾動,如果我想添加更多的行。你是否建議切換到ListView,DataGrid或其他控件? (再次,因爲我不需要這些數據綁定) – swabygw

+0

然後不要使用'ListBox'並把'Grid'放入'ScrollViewer'中 – dkozl

回答

0

您錯了使用ListBoxListBoxItemsControl,你並沒有真正處理綁定項目,所以你應該使用不同的控件來實現你的解決方案。像下面這樣的東西應該工作:

<ScrollViewer Height="50" 
       HorizontalAlignment="Center"> 
    <WrapPanel Width="150"> 
     <CheckBox Name="Wcf" 
        Content="WCF" 
        Width="75" /> 
     <CheckBox Name="Asp" 
        Content="ASP.NET" 
        Width="75" /> 
     <CheckBox Name="Java" 
        Content="Java" 
        Width="75" /> 
     <CheckBox Name="WhatIsThis" 
        Content="C+" 
        Width="75" /> 
     <CheckBox Content="WCF" 
        Width="75" /> 
     <CheckBox Content="ASP.NET" 
        Width="75" /> 
     <CheckBox Content="Java" 
        Width="75" /> 
     <CheckBox Content="C+" 
        Width="75" /> 
     <!-- add as many items as you want --> 
    </WrapPanel> 
</ScrollViewer> 

如果你想要的內容是滾動能,然後再包一個ScrollViewer圍繞它的WrapPanel並設置高度。

證明:

enter image description here

注:我強烈建議你使用數據綁定時,它是可能的。

+0

謝謝。我使用ListBox是因爲它可以滾動,如果我想添加更多的行。你是否建議切換到ListView,DataGrid或其他控件? (再次,因爲我不需要這些數據綁定) – swabygw

+0

@swabygw請參閱我的編輯 – Kcvin

+0

@swabygw如果您嘗試使用硬編碼標籤定義佈局,則最好不要使用從' ItemsControl'(如'ListBox'),除非你計劃從代碼隱藏中添加項目到控件(應該真的只是使用數據綁定,但我有偏見) – Kcvin

相關問題