C# 实现AllowColumnReorder

C# 实现AllowColumnReorder,c#,wpf,treeview,C#,Wpf,Treeview,我有一个从TreeView继承的控件(来自WPF框架的System.Windows.Controls.TreeView),它实现了一个GridViewColumnCollection来显示树旁边的列。但是现在我需要实现AllowColumnReorder,如果我们不希望用户对列进行重新排序,我该如何实现呢?以下是TreeView的代码: public class TreeListView : TreeView { protected override Depend

我有一个从
TreeView
继承的控件(来自WPF框架的System.Windows.Controls.TreeView),它实现了一个
GridViewColumnCollection
来显示树旁边的列。但是现在我需要实现
AllowColumnReorder
,如果我们不希望用户对列进行重新排序,我该如何实现呢?以下是
TreeView
的代码:

    public class TreeListView : TreeView
    {
        protected override DependencyObject GetContainerForItemOverride()
        {
            return new TreeListViewItem();
        }

        protected override bool IsItemItsOwnContainerOverride(object item)
        {
            return item is TreeListViewItem;
        }

        #region Public Properties

        private GridViewColumnCollection _columns;

        public GridViewColumnCollection Columns
        {
            get
            {
                if (_columns == null)
                {
                    _columns = new GridViewColumnCollection();
                }

                return _columns;
            }
        }

        public bool AllowColumnReorder { get; set; }

        #endregion
    }

谢谢大家!

找到了解决办法。它不完全在类实现中,但在XAML中以GridViewHeaderRowPresenter.AllowsColumnReorder的方式呈现:

<Style TargetType="{x:Type controls:TreeListView}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type controls:TreeListView}">
                        <Border BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
                            <DockPanel>
                                <GridViewHeaderRowPresenter AllowsColumnReorder="False" Columns="{Binding Path=Columns,RelativeSource={RelativeSource TemplatedParent}}"
                                            DockPanel.Dock="Top"/>
                                <ItemsPresenter/>
                            </DockPanel>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

找到了解决方案。它不完全在类实现中,但在XAML中以GridViewHeaderRowPresenter.AllowsColumnReorder的方式呈现:

<Style TargetType="{x:Type controls:TreeListView}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type controls:TreeListView}">
                        <Border BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
                            <DockPanel>
                                <GridViewHeaderRowPresenter AllowsColumnReorder="False" Columns="{Binding Path=Columns,RelativeSource={RelativeSource TemplatedParent}}"
                                            DockPanel.Dock="Top"/>
                                <ItemsPresenter/>
                            </DockPanel>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>


应由实际显示列数据的控件确定列是否允许排序。例如,如果使用GridView显示GridViewColumnCollection中的数据,则需要将GridView的AllowSorting属性设置为AllowColumnReorder属性中的值。

应由实际显示的控件确定列是否允许排序列数据。例如,如果您使用GridView显示GridViewColumnCollection中的数据,那么您可能希望将GridView的AllowSorting属性设置为AllowColumnReorder属性中的值。

是的,问题是现在我没有时间将该属性放入实际控件中,但我计划稍后再做,就目前而言,解决方案奏效了。谢谢。是的,问题是现在我没有时间把房产交给实际控制,我计划稍后再做,因为现在解决方案已经奏效了。谢谢