我想创建一个IValueConverter来计算每个GridViewColumn的宽度。
我制作了以下ListView.Resources:
<ListView.Resources>
<Specialized:ListDictionary x:Key="parametersWidth">
<sys:String x:Key="ID">25</sys:String>
<sys:String x:Key="Name">*</sys:String>
<sys:String x:Key="Description">*</sys:String>
<sys:String x:Key="Value">*</sys:String>
</Specialized:ListDictionary>
</ListView.Resources>
想法是将此ListDictionary作为参数传递给Converter, 并将GridViewHeader作为值。
GridViewHeader包含属性“ ActualIndex”,从而可以在“字典”中查找它。
在我的GridView中隐藏我的代码:
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Width" Value="{Binding Path=., Converter={StaticResource WidthConverter}, ConverterParameter={StaticResource parametersWidth}}"/>
</Style>
</GridView.ColumnHeaderContainerStyle>
在这种情况下,我的Converter正在运行,字典可以正确传递,但是值是Window的数据上下文。
我试图将其更改为:
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Width" Value="{Binding RelativeSource={RelativeSource Self}, Path=Value, Converter={StaticResource WidthConverter}, ConverterParameter={StaticResource parametersWidth}}"/>
</Style>
</GridView.ColumnHeaderContainerStyle>
但随后不再调用该转换器...
所以我有2个问题:
如何将GridViewColumn作为值传递给转换器?
转换器如何知道GridView / ListView的总宽度?
我可以从GridViewColumn导航到GridView / ListView知道宽度吗?
答案 0 :(得分:0)
好吧,感谢mm8,看来multivalueconverter是解决方案。
但是我仍然有一个问题...
现在,我的IValueConverter获取了所需的所有数据,并进行了宽度的计算,但它也将其返回(作为两倍),但是...视图未更新。...
请注意我的xaml宽度:
<GridView.ColumnHeaderContainerStyle>
<Style TargetType="{x:Type GridViewColumnHeader}">
<Setter Property="Width">
<Setter.Value>
<MultiBinding Converter="{StaticResource WidthConverter}" Mode="TwoWay">
<Binding RelativeSource="{RelativeSource Mode=Self}"/>
<Binding Source="{StaticResource parametersWidth}"/>
<Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorType={x:Type ListView}, AncestorLevel=1}" Path="ActualWidth"/>
</MultiBinding>
</Setter.Value>
</Setter>
</GridView.ColumnHeaderContainerStyle>