相关疑难解决方法(0)

WPF DataGrid:CanContentScroll属性导致奇怪的行为

我有一个解决方案,我根据用户标准生成一个DataGrid(或多个实例)..每个网格通过ObservableCollection继续接收数据

我遇到的问题是滚动表现得很奇怪.这是不稳定的,滚动条会在滚动时调整自己的大小.

比我发现.. CanContentScroll属性!它完全修复了奇怪的滚动行为,带给我暂时的幸福和快乐.

然而,它会导致2个不幸的副作用.

  1. 每当我重新创建网格实例并将它们绑定到我的可观察集合时,它会冻结整个窗口5秒钟.当我的网格增长到一个大尺寸时,这种延迟可以持续30秒.

  2. 当我调用TradeGrid.ScrollIntoView(TradeGrid.Items(TradeGrid.Items.Count - 1))滚动到底部时,它会跳到底部而不是回到顶部.

还有另一种方法可以实现平滑滚动吗?

wpf binding wpfdatagrid

14
推荐指数
1
解决办法
8077
查看次数

在列表框中获取视图中的项目

我有一个ListBox,其属性VirtualizingStackPanel.VirtualizationMode设置为"Recycling".我正在绑定自定义集合(implements IListIList<T>).

现在,如果我理解正确,当绑定数据时,将调用GetEnumerator.
然后public T this[int index] { }为当前视图中的每个项调用属性.

我的问题是如何获取当前可见的项目(加载数据后)?

c# wpf

7
推荐指数
1
解决办法
2338
查看次数

ScrollToVerticalOffset()不起作用?

我在WPF中使用ScrollView,我的应用程序允许用户单击按钮,然后它将自动滚动滚动视图,我在按钮单击事件中使用ScrollToVerticalOffset(),但scrollview没有更改任何内容.

我在互联网上搜索过这个问题,但到目前为止我还不能解决它.

还有一个问题:ScrollToVerticalOffset()取一个double作为参数,它可能会滚动到特殊像素,有没有办法滚动到n个项目(不是像素)?

这是我的代码

<ScrollViewer x:Name="scrollViewerChannelBtns" Grid.Row="1" HorizontalAlignment="Left" VerticalAlignment="Center" 
              Background="Transparent" VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden"
              CanContentScroll="True" ScrollChanged="ScrollViewerChannelBtns_ScrollChanged">
    <StackPanel x:Name="channelBtns" Orientation="Vertical">
        <ItemsControl x:Name="channelBtnItems" ItemsSource="{Binding}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <ToggleButton x:Name="tgbChannelName" Width="{Binding Path=ChannelNameBtnWidth}" Height="{Binding Path=ChannelNameBtnHeight}" HorizontalAlignment="Left" VerticalAlignment="Center" IsChecked="{Binding Path=IsChecked, Mode=TwoWay}" Content="{Binding Path=ChannelName}" Tag="{Binding Path=Index}"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </StackPanel>
</ScrollViewer>  
Run Code Online (Sandbox Code Playgroud)

C#代码

//The button click event handled
private void BtnScrollDownClicked(object sender, RoutedEventArgs e)
{                        scrollViewerChannelBtns.ScrollToVerticalOffset(scrollViewerChannelBtns.VerticalOffset + 50);
}
private void BtnScrollUpClicked(object sender, RoutedEventArgs e)
{                        scrollViewerChannelBtns.ScrollToVerticalOffset(scrollViewerChannelBtns.VerticalOffset - 50);
}
Run Code Online (Sandbox Code Playgroud)

非常感谢,T&T

c# wpf

3
推荐指数
1
解决办法
5656
查看次数

标签 统计

wpf ×3

c# ×2

binding ×1

wpfdatagrid ×1