我需要计算ItemsControl WPF项目的宽度,但是我需要传递的不是一个而是两个参数。这是它的样子:
<ItemsControl.Width>
<MultiBinding Converter="{StaticResource animationKeyPositionConverter}">
<Binding Path="CurrentFrame" ElementName="UC" />
<Binding Path="CurrentZoom" ElementName="UC" />
</MultiBinding>
</ItemsControl.Width>
转换器看起来像:
internal class AnimationKeyPositionConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var frame = System.Convert.ToInt32(values[0]);
var zoom = System.Convert.ToDouble(values[1]);
return (double)(frame * zoom);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
此转换器使用另一个multibind(使用Setter,另一个控件),但它不适用于ItemsControl.Width。有什么理由吗?到达多重绑定时,它会崩溃:
&#34;&#39; System.Windows.Markup.XamlParseException&#39;发生在PresentationFramework.dll
中&#39;设置属性&#39; System.Windows.Data.MultiBinding.Converter&#39;抛出异常。&#39;&#34;
我找不到关于异常的更多信息,调试器输出仅指出第266行(具有converter属性的multibind的第一行)引发了异常。值得注意的是,这个完全相同的multibind转换器和语法在另一个xaml控件中工作,但是一旦我将它放在ItemsControl.Width中,它就开始抛出异常并崩溃。
我在转换器上设置了一个断点,甚至没有达到代码。
答案 0 :(得分:0)
我通过更改我正在使用的绑定路径解决了我的问题。我不确定为什么CurrentFrame和CurrentZoom一起抛出错误但使用不同的路径(具体来说,指定CurrentZoom的相关源)我能够得到我需要的结果。尽管将(double)
转换更改为System.Convert.ToDouble
摆脱了InnerException,但转换器并不是真正的问题。我还将ToInt32
转换更改为双倍。