горизонтальная привязка в текстовом блоке не работает

#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 «Горизонтальное выравнивание» значение «Растягивать».