Видимость полосы прокрутки WPF ListView внутри холста - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь улучшить анимацию ListView внутри приложения WPF. Я хочу скрыть ListView из поля зрения (запускается Button). В открытом состоянии он должен занимать высоту своей родительской сетки. Я начал с анимации ScaleTransform, но мне не понравилось, как это искажает все элементы в элементах. Затем я попытался анимировать MaxHeight от 0 до высоты сетки, но это было действительно прерывисто (казалось, нормально на моем компьютере разработчика Core i7 Laptop Win7Pro, но при переходе на Intel Atom E3827 Win10 1607 это было довольно плохо). Я думал, что это может быть вызвано постоянным пересчетом Height и Scrollbar, поэтому я подумал, что просто поместил бы его в Canvas и установил бы его на ClipToBounds

<Grid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0,-1,0,0">
            <Canvas VerticalAlignment="Top" Height="0" ClipToBounds="True">
                <ListView HorizontalAlignment="Stretch" Height="{Binding ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}}" VerticalAlignment="Top" ScrollViewer.PanningMode="VerticalOnly" Background="#FFFFFEFF" ItemsSource="{Binding MessageLogViewModel.MessageLog}" >
                <ListView.View>
                    <GridView>
                        <GridViewColumn Header="Type" Width="220">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate DataType="{x:Type vm:MessageLogViewModel}">
                                    <StackPanel Orientation="Horizontal">
                                        <Path x:Name="PART_Path" Width="30" Height="30" Stretch="UniformToFill" Fill="{StaticResource DarkForeGround2}" Data="M12.44,6.065H15.55V9.175L14.773,16.639H13.218L12.44,9.175V6.065M12.44,18.816H15.55V21.93H12.44V18.816M28,14 A14,14 0 0,1 14,28A14,14 0 0,1 0,14A14,14 0 0,1 14,0A14,14 0 0,1 28,14 M26,12A12,12 0 0,1 12,26A12,12 0 0,1 2,12A12,12 0 0,1 12,2A12,12 0 0,1 26,12Z" Margin="28,0,15,0"/>
                                        <TextBlock Text="{Binding SeverityLevel}" VerticalAlignment="Center"/>
                                    </StackPanel>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn Header="In" Width="154" DisplayMemberBinding="{Binding TimeRaised,StringFormat=hh:mm tt}"/>
                        <GridViewColumn Header="Out" Width="154">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate DataType="{x:Type vm:MessageViewModel}">
                                    <TextBlock Text=""/>
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                        <GridViewColumn Header="Description" Width="875" DisplayMemberBinding="{Binding Description}"/>
                    </GridView>
                </ListView.View>
                <ListView.ItemContainerStyle>
                    <Style TargetType="{x:Type ListViewItem}">
                        <Setter Property="Height" Value="50"/>
                        <Setter Property="FontSize" Value="25"/>
                        <Setter Property="FontFamily" Value="{StaticResource Fonts.Button}"/>
                        <Setter Property="FontStretch" Value="Condensed"/>
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="ListViewItem">
                                    <Border Background="{TemplateBinding Background}" BorderThickness="0">
                                        <GridViewRowPresenter HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Content="{TemplateBinding Content}"/>
                                    </Border>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                        <Style.Triggers>
                            <Trigger Property="ItemsControl.AlternationIndex" Value="1">
                                <Setter Property="Background" Value="#FFF3F6F9"/>
                            </Trigger>
                        </Style.Triggers>

                    </Style>
                </ListView.ItemContainerStyle>
            </ListView>
                <Canvas.Style>
                    <Style TargetType="Canvas">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsChecked, ElementName=MessageButton}" Value="True">
                                <DataTrigger.EnterActions>
                                    <BeginStoryboard>
                                        <Storyboard TargetProperty="Height">
                                            <DoubleAnimation Duration="0:0:0.2" To="719"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </DataTrigger.EnterActions>
                                <DataTrigger.ExitActions>
                                    <BeginStoryboard>
                                        <Storyboard TargetProperty="Height">
                                            <DoubleAnimation Duration="0:0:0.2" To="0"/>
                                        </Storyboard>
                                    </BeginStoryboard>
                                </DataTrigger.ExitActions>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </Canvas.Style>
           </Canvas>
        </Grid>

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

Также это лучший способ сделать это. ListView всегда будет одного и того же эффективного размера, я хочу только оживить его появление, исчезновение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...