【发布时间】:2016-11-23 11:11:25
【问题描述】:
我已经缩小了原因,因为我使用 MultiBindingConverter 来计算变换中使用的角度。
我已将其精简到尽可能少。这是我的列表框的代码:
<Window.Resources>
<x:Array Type="{x:Type sys:Int32}" x:Key="Cards">
<sys:Int32>2</sys:Int32>
<sys:Int32>4</sys:Int32>
<sys:Int32>3</sys:Int32>
<sys:Int32>5</sys:Int32>
<sys:Int32>1</sys:Int32>
</x:Array>
<local:FanPositionCalculator x:Key="FanPositionCalculator"/>
</Window.Resources>
<ListView ItemsSource="{StaticResource Cards}" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="20" BorderBrush="Black" Padding="5,25,55,15">
<ListView.ItemTemplate>
<DataTemplate>
<Grid RenderTransformOrigin="0.5,0.5">
<Grid.RenderTransform>
<RotateTransform>
<RotateTransform.Angle>
<MultiBinding Converter="{StaticResource FanPositionCalculator}">
<Binding Source="{StaticResource Cards}"/>
<Binding Path=""/>
</MultiBinding>
</RotateTransform.Angle>
</RotateTransform>
</Grid.RenderTransform>
<TextBlock Text="Test"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
多重绑定根据其索引的计算将内容扇出。为此,我使用了多重绑定转换器:
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
int count = (values[0] as IList).Count;
int itemIndex = (values[0] as IList).IndexOf(values[1]);
double indexFromCenter = itemIndex - count / 2;
//multiply by the degrees we want for each card
return indexFromCenter * 3;
}
传递的第一个值是对象列表。第二个是有问题的对象。它计算旋转它的角度。
当我运行它时它工作正常:
但是,它会在设计时杀死整个设计师:
错误是 XamlObjectWriterException:
Collection property 'System.Windows.Data.Binding'.'Source' is null.
at System.Xaml.XamlObjectWriter.WriteGetObject()
at System.Xaml.XamlWriter.WriteNode(XamlReader reader)
at System.Windows.FrameworkTemplate.LoadTemplateXaml(XamlReader templateReader, XamlObjectWriter currentWriter)
我不知道如何解决。我的转换器中没有错误,但它的存在导致此错误发生在列表所在的窗口中(而不是列表本身!)。关于如何解决它的任何想法?我想知道我是否可以在设计时跳过使用转换器。我对显示未轮换的卡片感到满意……但我对整个设计师都死去并不满意,所以我想解决它。我正在使用 Visual Studio 2015。
【问题讨论】:
标签: wpf visual-studio xaml