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