【发布时间】:2020-04-10 00:07:07
【问题描述】:
我遇到了一个奇怪的情况,在我的 XAML 中找不到在引用程序集中定义的枚举(dll 是同一解决方案中的项目)。 C# 代码在我的视图模型中找到了相同的枚举。
当我将枚举定义文件复制到项目中时,XAML 引用工作,但 C# 引用当然会抱怨重复定义。在这一点上,我不知道如何解决这个问题。有任何想法吗?已知修复?
背景:
- 引用的程序集包含用于支持 XAML 无线电组的枚举,建议 here。
- 我找到了this,但它不适用于我的情况。引用程序集中的枚举独立存在。
- xaml 中的第一个 {x:static } 绑定参数引发错误(以下示例)并显示“找不到类型 'MyEnum'。请注意,类型名称区分大小写。”
- 以下代码中的任何小错误,请见谅,因为我无法透露我公司的生产代码,所以我是手写的。
EnumRadioGroupWindow.xaml
<Window x:Class="XamlWindow.EnumRadioGroupWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:XamlWindow"
xmlns:enum="clr-namespace:EnumLibrary">
<StackPanel>
<StackPanel.Resources>
<local:ComparisonToBoolConverter x:Key="ComparisonToBool"/>
</StackPanel.Resources>
<RadioButton Content="Item One" IsChecked="{Binding Path=InstanceOfMyEnum, Mode=OneWay, Converter={StaticResource ComparisonToBool}, ConverterParameter={x:Static enum:MyEnum.One}}"/>
<RadioButton Content="Item Two" IsChecked="{Binding Path=InstanceOfMyEnum, Mode=OneWay, Converter={StaticResource ComparisonToBool}, ConverterParameter={x:Static enum:MyEnum.Two}}"/>
<RadioButton Content="Item Three" IsChecked="{Binding Path=InstanceOfMyEnum, Mode=OneWay, Converter={StaticResource ComparisonToBool}, ConverterParameter={x:Static enum:MyEnum.Three}}"/>
</StackPanel>
</Window>
MyEnum.cs(在 WPF 项目引用的单独程序集中)
namespace EnumLibrary
{
public enum MyEnum
{
One,
Two,
Three
}
}
【问题讨论】:
-
仔细检查所有内容。确保您实际上已将库添加为对 WPF 项目的引用,确保您已正确声明 XML 命名空间(即它应包括程序集名称,如
xmlns:enum="clr-namespace:EnumLibrary;assembly=EnumLibrary"...让 XAML 编辑器帮助您当您在命名空间中键入时,它的自动完成功能),当然它确实在外部程序集中声明为public。除非我省略程序集名称,否则我无法重现您的问题,所以我怀疑这是您的问题。 -
谢谢,彼得!添加程序集提示确实解决了这个问题。 XAML 设计器中的自动完成功能不建议汇编提示!