ListBox с выравниванием DockPanel
У меня есть listbox
в котором я передаю 5 пунктов в каждом ряду.
XML-файл:
<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
но все становится очень запутанным. Кто-нибудь с идеей?
2 ответа
Решение
Оберните каждую визуальную группу в панель стека и примените стыковку к панели стека следующим образом:
<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>
Использовать Grid
, DockPanel
не очень хороший контроль Также Grids
иметь разделение по размеру, что часто полезно для элементов управления.