WPF - 列表框 - 项模板 - 滚动到顶部或底部,在选择任何内容之前重置默认视图

本文关键字:任何内 选择 视图 默认 底部 列表 滚动 顶部 WPF | 更新日期: 2023-09-27 18:32:04

我正在使用一个列表框,我也制作了自己的数据模板。其实我已经做了两个。它们包含一个图像(看起来像一个复选框)和一个带有一些文本的文本块。

两者都是制作的,因此您可以"多选"。每当单击列表框项中的图像时,它都会更改为选中的复选框。(这样做是为了语法目的,而不是常规复选框)然而,它们或多或少是相同的。其中一个有滚动问题,当我检查其中一些时,

[我的问题](http://postimg.org/image/h65g38s0x/)!

并一直向下滚动,直到到达列表框的底部。

然后返回顶部,只需滚动或释放底部的鼠标即可。

我的整个列表框都自行重置了它,就像它从一开始就刚刚加载一样。

我观察到的事情:

1)它不会重置我选择的字段(在我的示例行4中。2)如果我点击滚动条的顶部,也会出现此问题。3) 顶部和底部视图中的列表项不会重置。(因此,如果 IM 位于底部,并尝试进一步向下滚动,则可见的列表项不会发生任何反应。 只有那些看不见的项。

4) 如果未选择任何内容,则所有内容都会重置(添加到观察 1)。5)我已经测试了列表框上的所有事件,以查看其中一个是否被触发重置我的列表框(希望有解决方法),但是没有运气。

要记住的事情。

1)我的两个列表框在两个不同的数据模板上运行,但是,它们是相同的,减去文本块路径,图像相同,列表框相同,除了它们的项模板。

2)每个列表框都有自己的项目源绑定到包含对象的列表中。(列表 1. 字符串, 布尔 : 列表 2, 字符串, 布尔值, 对象)列表 2,是失败的。

3)另一个列表框就像一个魅力。

4)我可以提供很多代码,但是有很多代码需要接受,因为我不知道问题发生在哪里,所以我将提供一个片段。

    <DataTemplate x:Key="ListBoxItemTemplateAssignmentTypes">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto"/>
                    <RowDefinition Height="Auto"/>
                </Grid.RowDefinitions>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
            <StackPanel Name="StackPanelAssignmentType" Grid.Column="0" Grid.Row="0"                 Margin="0 0 0 0" >
                <Form:ImageCheckBox x:Name="ImageCheckBoxState" HorizontalAlignment="Right" 
                                        Source="/SimaTech.Forms.AssignmentBringBack;component/Images/Checkbox.png" 
                                        Width="24" Height="24" MouseLeftButtonUp="ImageCheckBoxState_MouseLeftButtonUp" />
            </StackPanel>
            <StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal" Margin="10 0 0 0">
                <TextBlock Name="TextBlockType" Text="{Binding Path=Type}" Style="{StaticResource TextBlockStyle1}" />
                </StackPanel>
            </Grid>
    </DataTemplate>
    <DataTemplate x:Key="ListBoxItemTemplateVehicle">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="Auto"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <StackPanel Name="StackPanelVehicle" Grid.Column="0" Grid.Row="0" Margin="0 0 0 0" >
                <Form:ImageCheckBox x:Name="ImageCheckBoxState" HorizontalAlignment="Right" 
                                        Source="/SimaTech.Forms.AssignmentBringBack;component/Images/Checkbox.png" 
                                        Width="24" Height="24" MouseLeftButtonUp="ImageCheckBoxState_MouseLeftButtonUp"  />
            </StackPanel>
            <StackPanel Grid.Row="0" Grid.Column="1" Orientation="Horizontal" Margin="10 0 0 0">
                <TextBlock Name="TextBlockName" Text="{Binding Path=Vehicle.Name}" Style="{StaticResource TextBlockStyle1}" />
            </StackPanel>
        </Grid>
    </DataTemplate>

     <Border Grid.Column="0" Grid.Row="2" Margin="20 10" Padding="20 0" BorderThickness="2 0 0 0" Style="{StaticResource BorderHorizontalSeperator}">
            <StackPanel>
                <StackPanel Orientation="Horizontal">
                    <StackPanel Margin="0 5">
                        <TextBlock Text="Gammel dato:" Style="{StaticResource TextBlockStyle1}" />
                        <DatePicker Name="DatePickerOldDate" CalendarStyle="{StaticResource StyleCalendar}" HorizontalAlignment="Left" Margin="0 10 0 0" Width="150" Background="White" SnapsToDevicePixels="True" >
                        </DatePicker>
                    </StackPanel>
                    <StackPanel Margin="18 5">
                        <TextBlock Text="Ny dato:" Style="{StaticResource TextBlockStyle1}" />
                        <DatePicker Name="DatePickerNewDate" CalendarStyle="{StaticResource StyleCalendar}" HorizontalAlignment="Left" Margin="0 10 0 0" Width="150" Background="White" SnapsToDevicePixels="True"/>
                    </StackPanel>
                </StackPanel>
                <StackPanel Margin="0 5">
                    <TextBlock Text="Opgave type:" Style="{StaticResource TextBlockStyle1}" Margin="0 5" />
                    <ListBox Name="ListBoxAssignmentTypes"  Margin="0 0 100 0" ItemTemplate="{StaticResource ListBoxItemTemplateAssignmentTypes}" >
                    </ListBox>
                </StackPanel>
            </StackPanel>
        </Border>
        <Border Grid.Column="1" Grid.Row="2" BorderThickness="0 0 2 0" Margin="10 10 20 10" Style="{StaticResource BorderHorizontalSeperator}">
            <StackPanel>
                <StackPanel>
                    <TextBlock Text="Montør/Montørgruppe:" Style="{StaticResource TextBlockStyle1}" Margin="0 5 0 10" />
                    <ListBox Name="ListBoxVehicles" Margin="0 0 120 0" ItemTemplate="{StaticResource ListBoxItemTemplateVehicle}" >
                    </ListBox>
                </StackPanel>
                <StackPanel Name="StackPanelButtons" Orientation="Horizontal" HorizontalAlignment="Left" Margin="0 30 0 0">
                </StackPanel>
            </StackPanel>
        </Border>

我背后也有代码,在图像中设置和删除我的"复选标记",但这仅在鼠标事件上触发,与滚动无关。

这是一个奇怪的问题,我想知道是否有人有一个想法,或者自己经历过。

编辑:发现当列表框具有一定数量的列表项时,它会将列表项重绘回默认值。第一个列表仅包含 11 个列表项,其他 25 个列表项和包含 25 个列表项的列表失败。我将相同的数量添加到另一个列表框中,并且相同的错误显示出来。

以最崇高的敬意麦克斯

WPF - 列表框 - 项模板 - 滚动到顶部或底部,在选择任何内容之前重置默认视图

我在这里使用Listbox离开,因为它具有某种自动布局刷新/更新内置功能,这是我的布局重置和用户控件呈现项目的原因,我将其添加到堆栈面板。

这对我有用。