2013-07-10 3 views
0

У меня есть listbox, в котором я передаю 5 элементов в каждой строке. Xml файл:ListBox с DockPanel Alignment

     <ListBox x:Name="DatabaseBox"> 
         <ListBox.ItemContainerStyle> 
          <Style TargetType="ListBoxItem"> 
           <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
          </Style> 
         </ListBox.ItemContainerStyle> 
          <ListBox.ItemTemplate> 
         <DataTemplate> 
           <DockPanel"> 
            <Image x:Name="ToggleFavoriteImage" Width="15" Height="15" Tag="{Binding Tag}" Source="{Binding ImageSource}" MouseLeftButtonDown="ToggleFavoriteImage_MouseLeftButtonDown"/> 
            <TextBlock x:Name="ListBoxSName" Width="220" Text="{Binding Name}" Margin="30,0,0,0" FontSize="11" MouseLeftButtonDown="ListBoxSName_MouseLeftButtonDown"/> 
            <Button x:Name="ListBoxSCoyntry" Height="17" Content="{Binding City}" FontSize="11" Click="ListBoxSCity_Click"/> 
            <Button x:Name="ListBoxSCity" Height="17" Content="{Binding Genre}" FontSize="11" Click="ListBoxSGenre_Click"/> 
            <Button x:Name="ListBoxSGenre" Height="17" Content="{Binding Country}" FontSize="11" Click="ListBoxSCountry_Click"/> 
           </DockPanel> 
         </DataTemplate> 
        </ListBox.ItemTemplate> 

        </ListBox> 

Что я хочу сделать, это Image и TextBlock пристыкован влево, а все остальные Купированный правой бок о бок. Я пробовал DockPanel.Dock ="Rigth" для всех Buttons, но все становится очень испорченным. Кто-нибудь с идеей?

ответ

4

Wrap каждая визуальная группа в панели стека и применить стыковку к StackPanel, например, так:

<DockPanel> 
    <StackPanel DockPanel.Dock="Left"> 
     <Image x:Name="ToggleFavoriteImage" Width="15" Height="15" Tag="{Binding Tag}" Source="{Binding ImageSource}" MouseLeftButtonDown="ToggleFavoriteImage_MouseLeftButtonDown"/> 
     <TextBlock x:Name="ListBoxSName" Width="220" Text="{Binding Name}" Margin="30,0,0,0" FontSize="11" MouseLeftButtonDown="ListBoxSName_MouseLeftButtonDown"/> 
    </StackPanel> 
    <StackPanel DockPanel.Dock="Right"> 
     <Button x:Name="ListBoxSCoyntry" Height="17" Content="{Binding City}" FontSize="11" Click="ListBoxSCity_Click"/> 
     <Button x:Name="ListBoxSCity" Height="17" Content="{Binding Genre}" FontSize="11" Click="ListBoxSGenre_Click"/> 
     <Button x:Name="ListBoxSGenre" Height="17" Content="{Binding Country}" FontSize="11" Click="ListBoxSCountry_Click"/> 
    </StackPanel> 
</DockPanel> 
+0

Это работало почти идеально. Единственное, что даже думали, что они состыкованы. Прямо и сейчас, они оставляют огромное пустое пространство справа. – oimitro

+0

Используйте 'DockPanel.Dock =" Заполнить "' это один из них, так как он будет использовать все оставшееся свободное место. Поведение «HorizontalAlignment» в этом случае – saamorim

+0

Это сработало отлично. Спасибо. Я решил не следовать StackPanel. Я сделал это так: 1st Button: DockPanel.Dock = «Right» 2nd Button: DockPanel.Dock = «Right» 3nd Button: HorizontalAlignment = «Right». И все элементы в DockPanel. – oimitro

0

Используйте Grid, DockPanel не хороший контроль. Также Grids имеют size-sharing, что часто полезно для элементов управления элементами.