【问题标题】:Referencing enum defined in another assembly from XAML with x:Static?使用 x:Static 从 XAML 引用另一个程序集中定义的枚举?
【发布时间】: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 设计器中的自动完成功能不建议汇编提示!

标签: c# wpf xaml enums


【解决方案1】:

您是否尝试在 xmlns 中添加程序集名称?

xmlns:enum="clr-namespace:EnumLibrary;assembly=EnumLibrary"

我建议再次检查您的 EnumLibrary 项目的程序集名称。如果您在解决方案资源管理器中更改了它的名称,并不意味着它已在项目属性中更新(在 csproj 中称为 &lt;AssemblyName&gt; 的 xml 节点)。

奖励,在 XAML 中,如果您需要使用嵌入在类中的枚举,可以使用 + char

MyClass+MyEnum.MyCase

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2017-03-31
    相关资源
    最近更新 更多