如何将全局枚举分配为 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}"/>
就像一个魅力。
你的语法没问题,但是在将枚举赋值为标签之前,你应该编译程序成功。
我阅读了几个关于该主题的问题,但答案对我不起作用。 我有以下在 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}"/>
就像一个魅力。
你的语法没问题,但是在将枚举赋值为标签之前,你应该编译程序成功。