[WPF]ScrollViewer中嵌套Grid,使用GridSplitter的问题
在ScrollViewer中嵌套了一个Grid,作为DataGrid自定义的Header。拖动HeaderGrid中的GridSplitter,即改变DataGrid的C...
在ScrollViewer中嵌套了一个Grid,作为DataGrid自定义的Header。
拖动Header Grid中的GridSplitter,即改变DataGrid 的Column宽度。
当拖动DataGrid的横向滚动条,Header的ScrollViewer横向滚动条也会跟随改变。
问题是,将DataGrid的横向滚动条拖到最后,再拖动Header Grid的GridSplitter时,
Header的滚动条滚到了最前面,当前的Column Header宽度也突然变为0...
很奇怪,实在不知道为什么会出现这样的变化。
我添加了一个全局的ScrollViewer的Style,是这个Style引出了该问题。但不明白具体是什么原因。全局的ScrollViewer的Style部分摘录如下:
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid Background="{TemplateBinding Background}">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ScrollContentPresenter Grid.Column="0"/>
<。。。引用自定义纵向滚动条。Grid.Column="1"。>
<。。。引用自定义横向滚动条。Grid.Row="1"。。>
</Grid>
</ControlTemplate> 展开
拖动Header Grid中的GridSplitter,即改变DataGrid 的Column宽度。
当拖动DataGrid的横向滚动条,Header的ScrollViewer横向滚动条也会跟随改变。
问题是,将DataGrid的横向滚动条拖到最后,再拖动Header Grid的GridSplitter时,
Header的滚动条滚到了最前面,当前的Column Header宽度也突然变为0...
很奇怪,实在不知道为什么会出现这样的变化。
我添加了一个全局的ScrollViewer的Style,是这个Style引出了该问题。但不明白具体是什么原因。全局的ScrollViewer的Style部分摘录如下:
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid Background="{TemplateBinding Background}">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ScrollContentPresenter Grid.Column="0"/>
<。。。引用自定义纵向滚动条。Grid.Column="1"。>
<。。。引用自定义横向滚动条。Grid.Row="1"。。>
</Grid>
</ControlTemplate> 展开
1个回答
展开全部
你能否贴上前台的xaml的代码,这样有助于分析
更多追问追答
追问
我前台几乎没什么代码,就一个ScrollViewer里面嵌套一个空的Grid,下面一个空的DataGrid。
所有Column包括Header的Column以及GridSplitter都是在后台动态添加的,功能较多,代码比较复杂。
这里关键一个功能就是,Column Header宽度改变时,下面的DataGrid对应Column宽度也会改变。
上下滚动条也是同步的。。。问题就在于,改变宽度和滚动条同步,同时出现的时候,滚动条就混乱了。
追答
虽然还不太清楚你的控件逻辑。但控件出现“混乱现象”大都是你控件出现了矛盾或有冲突的逻辑。我的建议是,控件与控件之间通过适当的绑定形式来控制显示逻辑。例如有一个colum里面放一个UserControl。那就可以在grid的sizechange事件里去设置UserControl的宽度或是在前台用binding(当然UserControl是在前台设定的时候可以这么做)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询