我希望我的程序的用户能够自己决定他们希望在我的 ListView/GridView 中看到哪些列。
为此,我为 创建了两个附加属性GridViewColumn
,一个称为IsColumnVisible
类型Boolean
(打开和关闭列的可见性),另一个称为LastWidth
类型Double
(保持该列上次可见时的宽度)。
该物业IsColumnVisible
确实有一个OnChangedCallback
.
当属性设置为 时False
,我将列的当前宽度保存在我的属性中LastWidth
,并将当前宽度设置为 0。
当属性设置为 时True
,我从我的属性中获取列的最后一个宽度LastWidth
并将当前宽度设置为那个值。
到目前为止,这是可行的,但存在一个缺陷,即可以使用鼠标调整隐藏列的大小以再次可见。因此,如果您有三列并且隐藏了中间一列,则使用鼠标调整第一列的大小最终会使第二列再次可见。
为了摆脱这种情况,我想将IsEnabled
隐藏列的标题状态设置为False
,这就是问题开始的地方。
假设我的列在 XAML 中定义如下(第 1 列和第 4 列可见,第 2 和第 3 列隐藏):
<GridView AllowsColumnReorder="True">
<GridViewColumn Header="Column 1" Width="50" DisplayMemberBinding="{Binding Column1}" local:GridViewColumnConfig.IsColumnVisible="True" />
<GridViewColumn Header="Column 2" Width="50" DisplayMemberBinding="{Binding Column2}" local:GridViewColumnConfig.IsColumnVisible="False" />
<GridViewColumn Header="Column 3" Width="50" DisplayMemberBinding="{Binding Column3}" local:GridViewColumnConfig.IsColumnVisible="False">
<GridViewColumn.Header>
<GridViewColumnHeader Content="Column 4" />
</GridViewColumn.Header>
</GridViewColumn>
<GridViewColumn Header="Column 4" Width="50" DisplayMemberBinding="{Binding Column4}" local:GridViewColumnConfig.IsColumnVisible="True" />
</GridView>
由于 my 属性的默认值为 ,IsColumnVisible
因此该属性的True
myOnChangedCallback
仅针对第 2 列和第 3 列运行。
我有一个类型的对象,GridViewColumn
并且OnChangedCallback
能够设置IsEnabled
列标题的状态,我需要确定GridViewColumnHeader
我的GridViewColumn
.
AGridViewColumn
具有Header
类型的属性Object
。在第 2 列的情况下,此属性包含String
“第 2 列”,在第 3 列的情况下,此属性为Nothing
。
有什么方法可以将 my 的标题GridViewColumn
作为GridViewColumnHeader
对象?
在第 2 列的情况下,我可以自己创建一个GridViewColumnHeader
对象,将其设置为属性Content
的值,Header
然后将Header
属性设置为该对象。
但如果我不需要,我宁愿不做这些改变。
在第 3 列的情况下,某处应该已经有一个GridViewColumnHeader
对象(因为我在 XAML 中定义了它),但我找不到它。
我已经尝试走可视化树,但由于GridViewColumn
不是 aVisual
或 a Visual3D
,那是不可能的。
有任何想法吗?谢谢你。