其中一个控件类似于WPF ListView ,文本文件可以包含具有各自属性的列集合。其中一个属性表示列是否具有固定宽度,WPF不会自动提供。
图片说千言万语,所以这里是一个解析文件的示例,其中包含带有四列的 ListView :
为了简单起见,我使用着色进行演示。带有红色文本的第一列是具有固定宽度的列。
为了实现这一点,在解析过程中,每个 GridViewColumnHeader 都会收到一个 Style ,它本身可以被修改,具体取决于包含在其中的标志(即“IsFixed”)该列的属性。
为了修复列的宽度,我创建了一个 Style ,它将 MinWidth 和 MaxWidth 设置器添加到样式中。请注意, ColumnResize 是自定义枚举。
private void _ModifyColumnResize(ref Style style, ColumnResize columnResize, int width)
{
if (columnResize == ColumnResize.IsFixed)
{
var minWidth = new Setter(MinWidthProperty, (double)width);
var maxWidth = new Setter(MaxWidthProperty, (double)width);
var fixedColor = new Setter(ForegroundProperty, Brushes.Red);
style.Setters.Add(minWidth);
style.Setters.Add(maxWidth);
style.Setters.Add(fixedColor);
}
}
这一切似乎都运行正常,双击列夹不会自动将宽度更改为其内容的宽度(与其他三列一样)。问题是如果我点击抓手然后尝试调整大小,那么我看到了:
如您所见,列本身具有相同的宽度,但在列的左侧和右侧,出现间距 - 这是不希望的。
我的问题是,我可以通过造型来阻止这种行为吗?理想情况下,我不希望对于不允许调整大小的列可以看到抓取器,但我不确定如何实现这一点,因为 Style 将在代码隐藏中创建(在解析)而不是 xaml 。
谢谢你的时间!
答案 0 :(得分:0)
感谢@DareToExplore,这里有解决方案:
我从MSDN中获取了 GridViewColumnHeader 的默认模板副本,并删除了 PART_HeaderGripper 部分。此样式不是每列的默认值,仅用于不应调整大小的列。
在解析文本文件时,对于每个可能调整大小的列,没有任何反应,因为这是默认行为。
对于不可调整大小的列,我从 App.xaml 中获取Style资源,然后将该Style分配给该 GridViewColumnHeader <的 HeaderContainerStyle 属性/ em>像这样:
if (parsedColumn.ColumnResize == ColumnResize.IsFixed)
{
var style = this.FindResource("GridViewColumnHeader_NoResize");
gridViewColumn.HeaderContainerStyle = style as Style;
}
现在,我将把样式留在 App.xaml 中并根据需要抓取它。
我希望这足够详细,它可以帮助一路上的人。
再次感谢@DareToExplore!