多重绑定在 XAML/WPF 中不起作用

Multibind not working in XAML/WPF

我需要计算 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();
    }
}

此转换器与另一个多重绑定(使用 Setter、另一个控件)一起工作,但它不适用于 ItemsControl.Width。有什么理由吗?当达到多重绑定时,它会崩溃:

"'System.Windows.Markup.XamlParseException' 发生在 PresentationFramework.dll

'设置 属性 'System.Windows.Data.MultiBinding.Converter' 抛出异常。'"

我找不到关于该异常的更多信息,调试器输出仅指出在第 266 行(具有转换器属性的多重绑定的第一行)引发了异常。再次值得注意的是,这个完全相同的多绑定转换器和语法在另一个 xaml 控件中工作,但是一旦我把它放在 ItemsControl.Width 中,它就开始抛出异常并崩溃。

我在转换器上设置了一个断点,但我什至没有到达代码。

我已经通过更改我使用的绑定路径解决了我的问题。我不确定为什么 CurrentFrame 和 CurrentZoom 一起抛出错误但使用不同的路径(具体来说,为 CurrentZoom 指定一个相对来源)我能够得到我需要的结果。转换器并不是真正的问题,尽管将 (double) 转换为 System.Convert.ToDouble 摆脱了 InnerException。我还将 ToInt32 转换也更改为 double。