Как сделать выравнивание содержимого listView по горизонтали? - PullRequest
0 голосов
/ 01 апреля 2019

Я загружаю флажки в виде тегов из таблицы SQL, но эти флажки ориентированы по вертикали, что на самом деле ужасно.Как я могу ориентировать их по горизонтали?

Я попытался установить для свойства setter значение Stretch, но оно только центрирует эти флажки в центре списка и остается вертикально.

Кто-нибудь может помочь?

xaml:

<ListView Name="listCategory" Visibility="Visible" BorderThickness="0" HorizontalAlignment="Left" Margin="114,70,0,0" Width="207" RenderTransformOrigin="0.5,0.5" Height="180" VerticalAlignment="Top">
  <ListView.ItemContainerStyle>
     <Style TargetType="ListViewItem">
       <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
       <Setter Property="VerticalContentAlignment" Value="Top"/>
     </Style>
  </ListView.ItemContainerStyle>
<ListView.ItemTemplate>
      <DataTemplate>
         CheckBox Content="{Binding tag}" IsChecked="{Binding Checked}" HorizontalAlignment="Center"/>
      </DataTemplate>
</ListView.ItemTemplate>

код для спискаКатегория

    public void loadCategoryTags()
    {
        DataTable dt = new DataTable();

        using (SqlCommand selectTags = new SqlCommand("select tag from Categories", cs))
        {
            cs.Open();
            using (SqlDataAdapter dataAd = new SqlDataAdapter(selectTags))
            {
                dt = new DataTable();
                dataAd.Fill(dt);
            }
            cs.Close();
        }
        dt.Columns.Add(new DataColumn("Checked", typeof(bool)) { DefaultValue = false });


        listCategory.ItemsSource = dt.DefaultView;
    }

1 Ответ

0 голосов
/ 02 апреля 2019

Оригинальный ответ

Лучше не настраивать основной макет в DataTemplate, а изменить его в стиле ListViewItem.

То есть:

  1. Удалить HorizontalAlignment="Center" свойство из вашего CheckBox;
  2. Добавьте ControlTemplate setter к вашим ListViewItem сеттерам и используйте свойство HorizontalContentAlignment.

Обновлен

Я знаю, что вы обрабатываете не свойство HorizontalAlignment, а свойство Orientation. Несколько панелей имеют свойство Orientation, и вы можете выбрать одну из них для достижения желаемого макета.

Это обновленный код:

<ListView Name="listCategory" Visibility="Visible" BorderThickness="0" HorizontalAlignment="Left"
          Margin="114,70,0,0" Width="207" RenderTransformOrigin="0.5,0.5" Height="180" VerticalAlignment="Top">
    <ListView.ItemsPanel>
        <ItemsPanelTemplate>
            <!-- If you use a StackPanel, your items will be in a single line. --> 
            <!--<StackPanel Orientation="Horizontal" />-->
            <!-- If you use a WrapPanel, your items will be wrapped into multiple lines. --> 
            <WrapPanel Orientation="Horizontal" />
            <!-- Or you can change it to other available panels to layout the items in a specified type. -->
        </ItemsPanelTemplate>
    </ListView.ItemsPanel>
    <ListView.ItemTemplate>
        <DataTemplate>
            <CheckBox Content="{Binding tag}" IsChecked="{Binding Checked}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...