Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-Listbox-ItemTemplate-滚动到顶部或底部,在选择任何内容之前重置默认视图_C#_Wpf - Fatal编程技术网

C# WPF-Listbox-ItemTemplate-滚动到顶部或底部,在选择任何内容之前重置默认视图

C# WPF-Listbox-ItemTemplate-滚动到顶部或底部,在选择任何内容之前重置默认视图,c#,wpf,C#,Wpf,我正在使用一个列表框,我也制作了自己的数据模板。。事实上我做了两个。 它们包含一个图像(看起来像一个复选框)和一个包含一些文本的文本块 它们都是为了让你可以“多选”。无论何时单击Listboxitem中的图像,它都会更改为选中的复选框。(这是出于一般目的,而不是常规复选框)但是,它们或多或少是相同的。其中一个有滚动问题,当我检查其中一些时 [我的问题]() 然后一直向下滚动,直到我到达列表框的底部 然后返回顶部,只需滚动或释放底部的鼠标即可 我的整个列表框已自行重置,就像刚从一开始加载一样 我观

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

它们都是为了让你可以“多选”。无论何时单击Listboxitem中的图像,它都会更改为选中的复选框。(这是出于一般目的,而不是常规复选框)但是,它们或多或少是相同的。其中一个有滚动问题,当我检查其中一些时

[我的问题]()

然后一直向下滚动,直到我到达列表框的底部

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

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

我观察到的事情:

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

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

要记住的事情

1) 我的两个列表框运行在两个不同的DataTemplates上,但是,它们是相同的,减去textblock路径,图像是相同的,列表框是相同的,除了它们的itemtemplates

2) 每个列表框都有自己的itemssource绑定到包含对象的列表。(List1.string,bool:List2,string,bool,object)List2失败

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>

我也有代码隐藏, 设置并删除图像中的“复选标记”,但这只是mouseupevent上的Triggered,与滚动无关

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

编辑: 发现当listbox具有一定数量的listitems时,它会将listitem重新绘制回默认值。第一个列表只包含11个列表项,其他25个列表项和一个包含25个列表项的列表项失败。我在另一个列表框中添加了相同的数量,同样的错误也显示了出来

致以最崇高的敬意
Max

我在这里使用一个列表框离开,因为它有某种自动布局刷新/更新内置功能,这是我布局重置的原因,而usercontrol显示一个项目,我将其添加到stackpanel


这对我很有用。

WPF不支持有winforms心态的开发人员。为这些项目创建一个合适的ViewModel,并绑定
复选框。如果选中
到ViewModel中的bool值,您的问题就会神奇地解决。请不要对所有内容都使用PNG。WPF是基于向量的,而不是基于位图的。您的固定大小PNG方法在许多不同的分辨率上都无法正常工作。我一生中从未见过如此多的
StackPanel
s。如果您有显示问题和滚动问题,请查看删除它们是否有帮助。根据我的经验,
Grid
是王者。哦,请提供后面的代码——这可能也是您的问题的根源。HighCore:只是一个小细节。我实际上没有做过那么多的数据绑定,这就是为什么我坚持这个解决方案。关于我不知道的位图,我真的只有Photoshop可以在我做图标和其他东西的时候使用,但是我能理解为什么vetor图形会更合适。Guttsy:网格无疑是另一个我会考虑的选择。给你们两个。我想我知道错误是什么,修复它的一种方法就是像HighCore那样做。