以上的ScrollViewer DataGrid中防止滚动 [英] DataGrids over ScrollViewer prevent it to scroll

查看:218
本文介绍了以上的ScrollViewer DataGrid中防止滚动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个置于ScrollViewer中倍数DataGrid中。
这些DataGrid中有一个高度:汽车的属性,这样我可以隐藏滚动条,并查看所有内容。
唯一的问题是,DataGrid中把焦点,所以我不能滚动的ScrollViewer。
是一个属性来保持专注于ScrollViewer中也保持DataGrid中(这样我就可以选择元素)的行为?

I have multiples DataGrids disposed over a ScrollViewer. These DataGrids have an "height: auto" property so that I can hide the scrollbar and view all the content. The only problem is that the DataGrids takes the focus and so I can't scroll the ScrollViewer. Is that a property to keep the focus on the ScrollViewer but also keeping the behaviour of the DataGrids (so I can select elements) ?

感谢您!

推荐答案

我碰到这个完全一样的问题,跑了,除了我的情况是有点复杂。相反,在ScrollViewer中有DataGrid中,我有一堆用户控件(称为ProductDataGrid和定义见下文)在我的ScrollViewer的:

I ran across this exact same issue except my scenario was a little bit more complicated. Instead of having DataGrid in a ScrollViewer, I had a bunch of UserControl (called ProductDataGrid and defined below) in my ScrollViewer:

ProductDataGrid.xaml:

ProductDataGrid.xaml:

<UserControl x:Class="My.Control.ProductDataGrid" ...>
    <Grid>
        <Grid.RowDefinitions>...</Grid.RowDefinitions>

        <TextBlock x:Name="Header" Grid.Row="0" ... />

        <DataGrid x:Name="ProductData" Grid.Row="1" ... />
    </Grid>
</UserControl>



ProductPortfolioListView.xaml:

ProductPortfolioListView.xaml:

<Page ...
      xmlns:my="clr-namespace:My.Control"
      ....>
    <Grid>
        <Grid.RowDefinitions>...</Grid.RowDefinitions>

        <ScrollViewer x:Name="ProductScrollViewer">
            <StackPanel>
                <my:ProductDataGrid ... />

                <my:ProductDataGrid ... />

                <my:ProductDataGrid ... />
            </StackPanel>
        </ScrollViewer>



由Livsi提供的解决方案是在正确的地方,但我的用户没有访问我的ScrollViewer,所以这里是我的解决方案:

The solution provided by Livsi is spot on correct but my UserControl did not have access to my ScrollViewer, so here is my solution:

ProductPortfolioListView.xaml:

ProductPortfolioListView.xaml:

<Page ...
      xmlns:my="clr-namespace:My.Control"
      ....>
    <Grid>
        <Grid.RowDefinitions>...</Grid.RowDefinitions>

        <ScrollViewer x:Name="ProductScrollViewer">
            <StackPanel>
                <my:ProductDataGrid ... 
                        PreviewMouseWheel="ProductDataGrid_PreviewMouseWheel" />

                <my:ProductDataGrid ... 
                        PreviewMouseWheel="ProductDataGrid_PreviewMouseWheel" />

                <my:ProductDataGrid ... 
                        PreviewMouseWheel="ProductDataGrid_PreviewMouseWheel" />
            </StackPanel>
        </ScrollViewer>



ProductPortfolioListView.xaml.cs:

ProductPortfolioListView.xaml.cs:

void ProductDataGrid_PreviewMouseWheel(object sender, MouseWheelEventArgs args)
{
    ProductScrollViewer.ScrollToVerticalOffset(ProductScrollViewer.ContentVerticalOffset - args.Delta;
    args.Handled = true;
}

请注意这个解决方案的美就在于,我可以分开我的DataGrid页面,将追究他们,所以我实现代码的隔离,以及更少的重复代码。更妙的是,我绝对利用了RoutedEvents不断从源propragating其所有父母的事实,直到有人处理它(这在我的情况是我ProductScrollViewer)。

Note the beauty of this solution lies in the fact that I can separate my DataGrid from the Page that will hold them, so I achieve code isolation as well as less duplicated code. And even better, I absolutely utilize the fact that RoutedEvents keep propragating from the Source to all of its parents until someone handles it (which in my case is my ProductScrollViewer).

这篇关于以上的ScrollViewer DataGrid中防止滚动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆