【发布时间】:2023-03-04 03:08:01
【问题描述】:
当我将鼠标悬停在带有蓝色下划线的文本上时,XAML 设计器会显示一个奇怪的错误。它还拒绝在预览中正确显示组件。文字很简单
Object reference not set to an instance of an object.
这看起来像NullReferenceException,但我不知道它来自哪里。它在启动的应用程序中正确显示。
它实际上似乎与从List<string> 继承并公开一个可设置的属性有关。如果我删除其中任何一个,它就可以工作。但我想要两者都用于我的转换器。
要重现它,只需创建一个空的 WPF .NET Framework 项目,并将其粘贴到命名空间内的 MainWindow.xaml.cs 代码下方:
public class BuggyConverter : List<string>, IMultiValueConverter
{
public object Value { get; set; }
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
=> Visibility.Visible;
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) => null;
}
然后这个进入MainWindow.xaml:
<Window...>
<Window.Resources>
<local:BuggyConverter x:Key="conv" Value="{x:Static Brushes.Yellow}" />
</Window.Resources>
<Grid>
<Border Visibility="{MultiBinding Converter={StaticResource conv}}" />
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Visibility="{MultiBinding Converter={StaticResource conv}}" Width="100" Height="100" Background="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsSource>
<x:Array Type="{x:Type Brush}">
<SolidColorBrush Color="Green" />
<SolidColorBrush Color="Red" />
</x:Array>
</ItemsControl.ItemsSource>
</ItemsControl>
</Grid>
</Window>
保持MainWindow.xaml 处于打开状态,然后通过“开始”按钮启动应用程序。你可以看到一个绿色和一个红色的方块。由于这是在 XAML 中硬编码的,因此我希望设计人员能够展示这一点。
相反,当您退出应用程序时,设计器会显示颜色十六进制代码而不是彩色方块,这似乎是因为转换器设置存在问题。
有什么问题?
【问题讨论】:
-
你想要完成的最终结果是什么?在 DataTemplate 级别,您正在查看单个项目(画笔)但尝试使用 MultiBinding?您是否正在尝试覆盖绑定中的值? (如果红色则黄色等)
-
@KevinCook 这只是一个非常精简的例子。我想确定是否根据多个属性启用了某些功能,这些属性通过
MultiBinding转换为单个bool值。我不需要帮助,但我希望能够在设计时预览我的模板(这显然在运行时工作),但 XAML 设计器不知何故放弃了。 -
您可能应该花一些时间查看转换器和绑定的示例,该代码有效(实际上并没有,但就像人们在学校失败一样,尽管代码是坏的)。您的多重绑定没有被绑定(因此出现错误),并且您的示例甚至没有办法在您尝试使用它的级别为其绑定多个项目,因为您的列表只有一个对象而不是一类对象,而您正试图在行级别使用它。
-
@KevinCook 我的回复不断被删除,不知道是谁删除的。该错误与您编写的任何内容都无关。请不要发布错误信息。
标签: c# wpf xaml xaml-designer