#wpf #xaml #listbox
#wpf #xaml #список
Вопрос:
У меня есть такой код в xaml:
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{DynamicResource Referee}" Width="120" FontWeight="Bold" Margin="0 0 5 0" HorizontalAlignment="Right"></TextBlock>
<TextBlock Text="LOL" Margin="0 0 5 0"></TextBlock>
</StackPanel>
</ListBoxItem>
Проблема заключается в том, что первый текстовый блок выровнен не по правому краю, а по левому.
Есть много элементов списка, и я хочу выровнять первый столбец по правому краю, а второй столбец по левому краю. В каждой стековой панели первый текстовый блок имеет ширину 120. ListBox находится в столбце сетки, ширина столбца которого установлена на Auto.
Как я могу решить эту проблему?
Ответ №1:
Панель стека по умолчанию размещает элементы слева направо (это можно изменить, установив FlowDirection=»RightToLeft»), поэтому не имеет значения, занимает ли панель стека всю доступную область, первый элемент всегда будет закреплен слева, независимо от того, как вы его выровняете.
<ListBoxItem>
<StackPanel Orientation="Horizontal" FlowDirection="RightToLeft" HorizontalAlignment="Right">
<TextBlock Text="{DynamicResource Referee}" Width="120" FontWeight="Bold" Margin="0 0 5 0"></TextBlock>
<TextBlock Text="LOL" Margin="0 0 5 0"></TextBlock>
</StackPanel>
</ListBoxItem>
Однако, если вы хотите, чтобы один текстовый блок был закреплен слева, а другой справа, тогда вам следует либо использовать DockPanel, либо сетку.
С помощью DockPanel:
<ListBoxItem>
<DockPanel>
<TextBlock Text="{DynamicResource Referee}" Width="120" FontWeight="Bold" Margin="0 0 5 0" DockPanel.Dock="Right"></TextBlock>
<TextBlock Text="LOL" Margin="0 0 5 0" DockPanel.Dock="Left"></TextBlock>
</DockPanel>
</ListBoxItem>
С сеткой:
<ListBoxItem>
<Grid>
<TextBlock Text="{DynamicResource Referee}" Width="120" FontWeight="Bold" Margin="0 0 5 0" HorizontalAlignment="Right"></TextBlock>
<TextBlock Text="LOL" Margin="0 0 5 0" HorizontalAlignment="Left"></TextBlock>
</Grid>
</ListBoxItem>
Как сетка, так и док-панель будут заполнять пространство, предоставленное им их родителем по умолчанию. И последний дочерний элемент панели dock заполнит оставшееся доступное пространство, если ширина / высота не указаны.
Ответ №2:
Установите свойство textAlignment
<TextBlock Text="{DynamicResource Referee}" Width="120" FontWeight="Bold" Margin="0 0 5 0" TextAlignment="Right"></TextBlock>
Ответ №3:
Установите для свойства StackPanel «Горизонтальное выравнивание» значение «Растягивать».