WPF - Использование сетки в элементе списка

1

Для начала я начинаю WPF, поэтому, пожалуйста, объясните это простыми словами.

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

Вот код (его немного грязный из-за моих попыток решить проблему):

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" x:Class="SurfManager.MainWindow"
    Title="MainWindow" Height="503" Width="933">
<Window.Triggers>
    <EventTrigger RoutedEvent="FrameworkElement.Loaded"/>
</Window.Triggers>
<Grid>
    <TabControl>
        <TabItem Header="Obecne Wypożyczenia" Background="White" Foreground="Black" BorderBrush="#FF8C8E94" OpacityMask="White">
            <Grid Background="#FFE5E5E5">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition/>
                </Grid.ColumnDefinitions>
                <Grid.RowDefinitions>
                    <RowDefinition/>
                </Grid.RowDefinitions>
                <ListView BorderThickness="0" Height="440">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn/>
                        </GridView>
                    </ListView.View>
                    <ListViewItem>
                        <ListViewItem.Background>
                            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                <GradientStop Color="#FF2AD618" Offset="0"/>
                                <GradientStop Color="#FF6CFF5D" Offset="0.582"/>
                            </LinearGradientBrush>
                        </ListViewItem.Background>
                        <Grid Height="82.96" Width="859.733">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="41*"/>
                                <RowDefinition Height="42*"/>
                            </Grid.RowDefinitions>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="0*"/>
                                <ColumnDefinition Width="180*"/>
                                <ColumnDefinition Width="283*"/>
                                <ColumnDefinition Width="387*"/>
                                <ColumnDefinition Width="140*"/>
                            </Grid.ColumnDefinitions>
                            <Label Content="Imię:"  Margin="8.001,10,0,38" Grid.RowSpan="2" Grid.Column="1" Grid.ColumnSpan="2" />
                            <Label Content="Nazwisko:"  Margin="8.001,5.451,0,3.529" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2"/>
                            <Label Content="Początek:" HorizontalAlignment="Left" Margin="0.978,10,0,0" VerticalAlignment="Top" Height="27.96" Width="59.733" Grid.Column="2"/>
                            <Label Content="Koniec:" HorizontalAlignment="Left" Margin="0.978,1.92,0,0" VerticalAlignment="Top" Height="33" Grid.Row="1" Width="48.107" Grid.Column="2"/>
                            <Label Content="Pozostało" HorizontalAlignment="Left" Margin="37,10,0,0" VerticalAlignment="Top" Height="25.96" Width="61.79" Grid.Column="3"/>
                            <Label Content="Cena:" HorizontalAlignment="Left" Margin="37,8.96,0,0" VerticalAlignment="Top" Grid.Row="1" Height="25.96" Width="39.204" Grid.Column="3"/>
                            <Label Content="Deska" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,5.02,0,0" Height="25.96" Width="41.853" Grid.Column="4"/>
                            <Label Content="Żagiel" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="9.746,6.02,0,0" Height="25.96" Width="42.107" Grid.Column="4" Grid.Row="1"/>
                        </Grid>
                    </ListViewItem>
                </ListView>
            </Grid>
        </TabItem>
        <TabItem Header="Baza Klientow">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
        <TabItem Header="Administracja sprzętem" HorizontalAlignment="Left" Height="19.96" VerticalAlignment="Top" Width="144.32" Margin="-2,-2,-7,0">
            <Grid Background="#FFE5E5E5"/>
        </TabItem>
    </TabControl>
</Grid>
</Window>
  • 0
    Размер вашей сетки не будет меняться, если вы указали явную ширину.
  • 0
    Какие из них вы имеете в виду? те в определениях строки / столбца или в <Grid Height = "82.96" Width = "859.733">? Я удалил последний, но он ничего не изменил.
Показать ещё 4 комментария
Теги:
wpf
grid
listview
listviewitem

2 ответа

1
Лучший ответ

вот что вам нужно

добавьте этот ресурс стиля в свой список и удалите ширину из своей сетки.

    <ListView BorderThickness="0"
                Height="440">
        <ListView.Resources>
            <Style TargetType="ListViewItem">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="ListViewItem">
                            <Border Background="{TemplateBinding Background}">
                                <ContentPresenter />
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListView.Resources>

путем изменения шаблона по умолчанию из списка элементов списка сделает контент значимым

также удалить следующее, поскольку это не обязательно

<ListView.View>
    <GridView>
        <GridViewColumn/>
    </GridView>
</ListView.View>
  • 0
    Вот что мне нужно спасибо
1

ListView часто используется следующим образом:

использование связывания:

<ListView BorderThickness="0" >
      <ListView.View>
              <GridView>
                 <GridViewColumn Header="Name" Width="200" DisplayMemberBinding="{Binding Name}"/>
                 <GridViewColumn Header="Address" Width="200" DisplayMemberBinding="{Binding Address}"/>
               </GridView>
</ListView.View>

или вот так:

 <ListView BorderThickness="0" >
     <ListViewItem>
          <Grid >
             ....
          </Grid>
      </ListViewItem>
  </ListView>

вы уверены, что вам нужно установить ListView.View и ListViewItem? Это будет выглядеть так: Изображение 174551

Кстати, вы не должны устанавливать ширину и высоту сетки, самое главное, ваше содержимое сетки выглядит запутанным. вы должны установить эти таблицы в правильной Grid.Col или Grid.Row, почему вы устанавливаете ColumnSpan/RowSpan? Если вы уверены, что это правильно?

  • 0
    Удачного кодирования, удачи

Ещё вопросы

Сообщество Overcoder
Наверх
Меню