2013-12-16 61 views
2

我將複選框添加到我的列表框,但它們沒有對齊,因爲我想。這裏是我的XAML列表框對齊框內的複選框WPF

<ListBox ItemsSource="{Binding Path= Reminders}" Grid.Row="2" Height="250" Width="250" Name="reminderListBox" HorizontalAlignment="Left" SelectedItem="{Binding Path=Reminder, UpdateSourceTrigger=PropertyChanged}" >         
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <StackPanel Orientation="Horizontal">            
      <Image Grid.Column="0" Source="/WPFPanErpLite;component/Images/bullet.png" /> 
      <TextBlock Grid.Column="1" Text="{Binding Text}" FontSize="15" Foreground="#003366" /> 
      <CheckBox Grid.Column="2" Name="IsDone" HorizontalAlignment="Right" />             
     </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

複選框顯示,但問題是,他們「粘」我的文字塊的內容。我想將我的複選框移動到我的列表框的右邊緣,並希望它們對齊,就像將複選框列添加到datagrid或listview時一樣。如何管理這個?

UPDATE:

<ListBox ItemsSource="{Binding Path= Reminders}" Grid.Row="2" Height="250" Width="250" Name="reminderListBox" HorizontalAlignment="Left" SelectedItem="{Binding Path=Reminder, UpdateSourceTrigger=PropertyChanged}" > 
           <Style TargetType="ListBoxItem"> 
            <Setter Property="HorizontalAlignment" Value="Stretch"/> 
            <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
           </Style> 
           <ListBox.ItemTemplate> 
            <DataTemplate> 
             <DockPanel> 
              <Image DockPanel.Dock="Left" Source="/WPFPanErpLite;component/Images/bullet.png" />             
              <CheckBox DockPanel.Dock="Right" Name="IsDone" HorizontalAlignment="Right" /> 
              <TextBlock Text="{Binding Text}" FontSize="15" Foreground="#003366" /> 
             </DockPanel> 
            </DataTemplate> 
           </ListBox.ItemTemplate> 
          </ListBox> 

回答

2

您的佈局是錯誤的。一個StackPanel Orientation="Horizontal"不會水平拉伸到它的容器。

變化,通過一個DockPanel

<DockPanel>            
    <Image DockPanel.Dock="Left" Source="/WPFPanErpLite;component/Images/bullet.png" /> 
    <CheckBox DockPanel.Dock="Right" />             
    <TextBlock Text="{Binding Text}" FontSize="15" Foreground="#003366" /> 
</DockPanel> 

另外,還要確保您的ListBoxItem s的拉伸:

編輯:

我的意思是你設置這個風格爲ListBox.ItemContainerStyle,像所以:

<ListBox> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="HorizontalAlignment" Value="Stretch"/> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     </Style> 
    </ListBox.ItemContainerStyle> 

    <!-- ... --> 
</ListBox> 

否則,ListBox將「認爲」你想將Style設置爲Item

+0

我改變了一個DockPanel的StackPanel,但我仍然有同樣的問題。 – Stojdza

+0

@stojdza確保你的ListBoxItems被拉伸。還要確保你正確設置了DockPanel.Dock屬性,並且'TextBox'是最後一個孩子。否則發佈您當前的XAML。 –

+0

抱歉沒有看到關於拉伸的更新。我改變了我的代碼,但現在,我的文本塊的內容不可見,只有圖像和複選框,我的複選框仍然沒有移動到右側。我用新的xaml更新了我的問題。 – Stojdza

-1

設置的空白

<CheckBox Grid.Column="2" Name="IsDone" Margin="10,0,0,0"/> 

或者

<Grid> 
        <Grid.ColumnDefinitions> 
         <ColumnDefinition Width="Auto"/> 
         <ColumnDefinition Width="Auto"/> 
         <ColumnDefinition Width="20"/> 
        </Grid.ColumnDefinitions> 
        <Image Grid.Column="0" Source="/WPFPanErpLite;component/Images/bullet.png" /> 
        <TextBlock Grid.Column="1" Text="{Binding OwnerId}" FontSize="15" Foreground="#003366" /> 
        <CheckBox Grid.Column="2" Name="IsDone" HorizontalAlignment="Right" Background="Red"/> 
       </Grid> 
+0

-1這不符合OP的要求「'我想把我的複選框移動到我的列表框的右邊緣」。看到我的答案。 –

+0

我認爲問題在於CheckBox沒有空間來對齊,所以OP顯式地需要給它一些Width/Margin來對齊到Right或Left。 – ethicallogics

+1

當然沒有。在WPF中硬編碼的大小几乎總是被認爲是不好的做法和不必要的。 –