有没有办法将滚动查看器仅应用于树视图项目的一部分?

时间:2013-07-06 02:03:01

标签: wpf xaml treeview

我有一个树视图,其中每个树视图项都包含信号和信号名称。

我希望在treeview项目中有一个扩展的名称面板,但我希望滚动查看器只滚动包含treeviewitem信号的面板的右侧部分。

创建自定义树视图类的唯一答案是什么?我最初的想法是将两个样式模板应用于每个树视图,这样扩展器按钮就在一个树视图上,只是在另一个树视图的扩展中扩展一个结果。但最终我无法想出一种方法来使用触发器链接两个树视图中的项目,这样当一个项目扩展时,其对应项会扩展。

我也只使用controltemplate来定制它,但我觉得scrollviewer只需要放在treeviewitem的一部分周围,但是在treeview控件模板内部没有办法将项目分割到itemspresenter 。

我是创建自定义树视图的最佳选择吗?

编辑:

创建一个类似于建议的itemtemplate会为每个项目的一部分创建一个单独的scrollviewer,所以我最终会得到6个小的scrollviewer。但我要做的是在所有项目的右栏上应用滚动查看器。但是,要将scrollviewer应用于所有项目,我想我需要将它放在treeview controltemplate中。但是在treeviewcontroltemplate中,您只能访问itemspresenter:

       <ControlTemplate TargetType="TreeView">
            <ScrollViewer 
                Focusable="False"
                CanContentScroll="False"
                Padding="4">
              <StackPanel>
                <wpfExp:SignalGraphAxis 
                      PenColor="{Binding ElementName=GraphColorPicker, Path=SelectedColor, Mode=OneWay}"
                      Height="{Binding ElementName=graph_viewer, Path=GraphHeight, Mode=OneWay}"                
                      PenWidth="{Binding ElementName=graph_viewer, Path=GraphPenWidth, Mode=OneWay}"
                      X_Scale="{Binding ElementName=graph_viewer, Path=X_Scale, Mode=OneWay}"
                      MaxTimeValue="{Binding ElementName=graph_viewer, Path=_SignalDataViewModel.MaxTimeValue, Mode=OneWay}"
                    />
                <ItemsPresenter />
              </StackPanel>
            </ScrollViewer>

          </ControlTemplate>

1 个答案:

答案 0 :(得分:1)

您可以使用Itemtemplate来完成。这是一个例子

    <TreeView>
        <TreeView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition></ColumnDefinition>
                        <ColumnDefinition></ColumnDefinition>
                    </Grid.ColumnDefinitions>

                    <ScrollViewer Grid.Column="0">
                        <!-- Your Signal data binding -->
                    </ScrollViewer>

                    <!-- Your Signalname data binding -->
                </Grid>
            </DataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>