#c# #wpf #listview #grid #listviewitem
#c# #wpf #просмотр списка #сетка #listviewitem
Вопрос:
Начнем с того, что я новичок в WPF, поэтому, пожалуйста, объясните это простыми словами.
Я хочу создать пользовательский элемент listview с довольно большим количеством элементов. Я решил использовать сетку, чтобы выровнять ее красиво. К сожалению, когда я попытался проверить, все ли в порядке с изменением размера, фон (элемент listview) изменяется, а сетка — нет. Я думаю, это потому, что сетка неправильно привязана к элементу listview. Итак, вопрос в том, как я могу прикрепить сетку к элементу 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>
Комментарии:
1. Ваша сетка не будет изменять размер, если вы указали явную ширину.
2. Какие из них вы имеете в виду? те, которые находятся в определениях строк / столбцов или в <Высота сетки =»82,96″ Ширина =»859,733″>? Я удалил последний, но это ничего не изменило.
3. не могли бы вы опубликовать скрин ожидаемого результата?
4. вы уверены, что в вашем listview установлены как <ListView.View>, так и <ListViewItem>
5. @pushpraj ну, это то же самое, что и в xaml (за исключением того, что я не скопировал </Window> в конце, я отредактирую) я опубликовал, я просто хочу, чтобы все элементы внутри масштабировались
Ответ №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>
Ответ №2:
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
? Это будет выглядеть так :
кстати, вы не должны устанавливать ширину и высоту сетки, самое главное, что содержимое вашей сетки выглядит запутанным. вы должны установить эти метки в правильной сетке.Col или Grid.Row, почему вы устанавливаете ColumnSpan / RowSpan? Если вы уверены, что это правильно?