Изменение размеров колонок в ListView

Рейтинг: 0Ответов: 1Опубликовано: 08.11.2014

Приветствую.

Тема снова о необычном ListView.
В общем, есть код:

<Window.Resources>
    <vm:ViewModel x:Key="viewModel"/>

    <Style x:Key="cellBorder" TargetType="Border">
        <Setter Property="BorderBrush" Value="#F0F0F0" />
        <Setter Property="BorderThickness" Value="1" />
    </Style>
</Window.Resources>
<Grid DataContext="{StaticResource viewModel}">

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!-- headers -->
        <Grid Grid.Row="0" Background="#FDFDFD">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="*"/>
            </Grid.ColumnDefinitions>

            <Border Grid.Column="0" Style="{StaticResource cellBorder}">
                <TextBlock HorizontalAlignment="Center" Text="Name"/>
            </Border>
            <Border Grid.Column="1" Style="{StaticResource cellBorder}">
                <TextBlock HorizontalAlignment="Center" Text="Price"/>
            </Border>
        </Grid>

        <ListView Grid.Row="1" BorderThickness="0" HorizontalContentAlignment="Stretch"
              ItemsSource="{Binding Products}">
            <ListView.Resources>
                <!-- this is what unselected items will look like -->
                <DataTemplate x:Key="DefaultItemTemplate">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>

                        <TextBlock Grid.Column="0" Margin="3" FontSize="12"
                               Text="{Binding Name}" />
                        <TextBlock Grid.Column="1" Margin="3" FontSize="12"
                               Text="{Binding Price}" />
                    </Grid>
                </DataTemplate>

                <!-- this is what selected items will look like -->
                <DataTemplate x:Key="SelectedItemTemplate">
                    <Grid MinHeight="80" MaxHeight="150">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="*"/>
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>

                        <!-- normal row data (with bold) -->
                        <TextBlock Grid.Row="0"  Grid.Column="0" Margin="3" FontSize="12" FontWeight="Bold"
                               Text="{Binding Name}" />
                        <TextBlock Grid.Row="0" Grid.Column="1" Margin="3" FontSize="12" FontWeight="Bold"
                               Text="{Binding Price}" />

                        <!-- the panel below row -->
                        <Grid Grid.Row="1" Grid.ColumnSpan="2" Margin="0,10,0,0">
                            <TextBox Margin="3" HorizontalAlignment="Left" Width="300" MinLines="6"
                                     AcceptsReturn="True" VerticalScrollBarVisibility="Auto"
                                    Text="{Binding Description}"/>
                        </Grid>
                    </Grid>
                </DataTemplate>
            </ListView.Resources>

            <ListView.ItemContainerStyle>
                <Style TargetType="ListBoxItem">

                    <!-- default item template when not selected -->
                    <Setter Property="ContentTemplate" Value="{StaticResource DefaultItemTemplate}" />
                    <Style.Triggers>
                        <Trigger Property="IsSelected" Value="True">
                            <!-- when selected change item template -->
                            <Setter Property="ContentTemplate" Value="{StaticResource SelectedItemTemplate}" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </ListView.ItemContainerStyle>
        </ListView>
    </Grid>
</Grid>

Работает он так:

http://i.gyazo.com/7fd806741c1936ceb3f9cc6ba38435f6.gif

Проблема заключается в том, что нельзя изменить ширину колонок, либо *, либо фиксированная ширина для всех.

Мне нужно задать для каждой колонки индивидуальную ширину или иметь возможность менять эту ширину мышкой. Как осуществить такую возможность в данном примере?

Ответы

▲ 2

Не, вы делаете неправильно. Вы задали колонки, но ваш DataTemplate не использует эти колонки, а определяет свои. Таким образом, ваши колонки обладают собственным поведением и неправильно реагируют на изменение настоящих колонок.

Пользуйтесь GridView в ListView.View.