2015-01-14 8 views
8

Ho letto diverse domande sull'argomento, ma le risposte non funzionano per me. Ho il seguente enum che viene dichiarata in StlContainer.cs:Come assegnare l'enum globale come valore Tag in XAML?

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

L'enumerazione viene dichiarata al di fuori della definizione della classe StlContainer che lo rende un enum globale. Voglio cedere i propri valori alla proprietà Tag di diversi controlli XAML, così ho cercato di fare in questo modo:

<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> 

Ma ottenuto l'errore:

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

ho provato a spostare l'enumerazione di MainWindow .xaml.cs, ho provato

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

e

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

Ho provato ad assegnarlo a un tag su un controllo Label e ho ancora lo stesso errore. Cosa mi manca qui? Posso usare qualche tipo di binding per risolvere questo?

PS: quando si digita il valore e si arriva a Tag="{x:Static }" il completamento automatico suggerisce solo il parametro Membro per completarlo come questo Tag="{x:Static Member=}" se ciò è importante.

+0

Come si definisce lo spazio dei nomi 'local' in XAML? È 'ToothVisualModelType' in quello spazio dei nomi? – dkozl

+0

Non vedo niente di sbagliato nel tuo codice 'Tag =" {x: Static local: ToothVisualModelType.Tooth} "' .. Questo è assolutamente corretto ... –

+0

@AmolBavannavar Questo è esattamente ciò con cui sto combattendo. Dovrebbe funzionare, ma non è così. E sì, tutto è nello stesso spazio dei nomi – mandarin

risposta

2

ho trovato la soluzione dopo aver letto this. Ho pensato che questo è stato fatto automaticamente o internamente, ma la soluzione è che devo dichiarare esplicitamente lo spazio dei nomi local nel tag finestra in questo modo:

xmlns:local="clr-namespace:Dental_Viewer" 

Poi <xctk:ColorPicker Tag="{x:Static local:ToothVisualModelType.Tooth}"/> funziona come un fascino.

3

tenta di utilizzare questa espressione:

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

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

oppure è possibile creare una classe statica in questo modo:

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

In XAML utilizzato anche in questo modo:

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