如何将全局枚举分配为 XAML 中的 Tag 值?

How to assign global enum as Tag value in XAML?

我阅读了几个关于该主题的问题,但答案对我不起作用。 我有以下在 StlContainer.cs 中声明的枚举:

public enum ToothVisualModelType
{
    CoordinateSystemPivot = 0,
    Tooth = 1,
    Crown = 2,
    Gums = 3
}

枚举在 StlContainer class 定义之外声明,这使其成为全局枚举。我想将它的值分配给不同 XAML 控件的标签 属性,所以我尝试这样做:

<xctk:ColorPicker Tag="{x:Static local:ToothVisualModelType.Tooth}" 
                  Name="colorPickerTooth" 
                  Width="110" 
                  Grid.Column="1" 
                  Grid.Row="3" 
                  SelectedColorChanged="colorPickerTooth_SelectedColorChanged" 
                  DisplayColorAndName="True" 
                  Margin="0,0,10,5">
 </xctk:ColorPicker>

但出现错误:

Error 1 Unknown build error, 'Key cannot be null. Parameter name: key Line 234 Position 43.' D:\Visual Studio\Projects\Dental Viewer\Dental Viewer 1.2\Dental Viewer\MainWindow.xaml 234 43 Dental Viewer 1.2

我试过将枚举移动到 MainWindow.xaml.cs,我试过

Tag="{x:Static local:StlContainer+ToothVisualModelType.Tooth}"

Tag="{x:Static MyNamespace:ToothVisualModelType.Tooth}"

我试图将其分配给 Label 控件上的 Tag,但仍然出现相同的错误。我在这里错过了什么?我可以使用某种绑定来解决这个问题吗?

PS:当我输入值并到达 Tag="{x:Static }" 时,自动完成仅建议 Member 参数像这样 Tag="{x:Static Member=}" 完成它,如果这很重要的话。

尝试使用这个表达式:

<Control Name="MyControl"
         Width="100"
         Height="30">

    <Control.Tag>
        <x:Static Member="local:ToothVisualModelType.Tooth" />
    </Control.Tag>
</Control>

或者您可以像这样创建静态 class:

internal static class ToothVisualModelClass
{
    public static string CoordinateSystemPivot = "0";
    public static string Tooth = "1";
    // ...etc...
}

在XAML中也这样使用:

Tag="{x:Static local:ToothVisualModelClass.Tooth}"

我在阅读 this 后找到了解决方案。 我认为这是自动或内部完成的,但解决方案是我必须在 Window 标记中显式声明 local 名称空间,如下所示:

xmlns:local="clr-namespace:Dental_Viewer"

然后 <xctk:ColorPicker Tag="{x:Static local:ToothVisualModelType.Tooth}"/> 就像一个魅力。

你的语法没问题,但是在将枚举赋值为标签之前,你应该编译程序成功。