在冻结DataGrid列时,在水平滚动条的空白区域添加任何控件

时间:2013-01-24 00:08:35

标签: c# wpf

enter image description here

您好,

我的FrozenColumnCount = 3始终显示HorizontalScrollBar。现在,我需要在空白区域(滚动条的左侧)添加控件 - 请参阅图像中的RED突出显示区域。

如何在那里添加任何控件?如果可以通过XAML(ControlTemplates)实现这种功能,那将会很棒吗?我在我的应用程序中使用标准WPF v4.0 datagrid

  

注意:样本可以从这里下载 -   http://blogs.msdn.com/b/vinsibal/archive/2008/10/31/wpf-datagrid-frozen-row-sample.aspx

2 个答案:

答案 0 :(得分:2)

我从DataGrid Styles and Templates的文档开始。

注意模板中看起来像这样的部分

              <Grid Grid.Column="1"
                Grid.Row="2">
            <Grid.ColumnDefinitions>
              <ColumnDefinition Width="{Binding NonFrozenColumnsViewportHorizontalOffset, 
                  RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
              <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>

            <ScrollBar x:Name="PART_HorizontalScrollBar"
                       Grid.Column="1"
                       Orientation="Horizontal"
                       ViewportSize="{TemplateBinding ViewportWidth}"
                       Maximum="{TemplateBinding ScrollableWidth}"
                       Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                       Value="{Binding HorizontalOffset, Mode=OneWay, 
                RelativeSource={RelativeSource TemplatedParent}}"/>
          </Grid>

此部分定义DataGrid中的底部滚动条区域。注意绑定到NonFrozenColumnsViewportHorizo​​ntalOffset - 该值确定空左区域的宽度。

您可以将整个DataGrid模板复制到项目中应用程序资源的样式中。然后,插入你自己的名为水平的StackPanel,其中Grid.Column =“0”(ScrollBar的兄弟),然后你可以添加自己的子按钮,文本等作为新StackPanel的子项。

答案 1 :(得分:1)

你有两种方法可以解决它。

一个。安装snoop,找出这个区域所属的元素,看看它是否可以在模板中访问(我希望你知道如何在Blend中创建模板的副本)。

湾处理大小/移动事件并将控件放在此区域上方,只需将控件精确定位,就像它们位于网格模板中一样......