2012-03-03 11 views
6

Mam dwa pliki w moim projekcie kontra Custom.xaml i Custom.csDostęp XAML steruje z C# kod z opóźnieniem

W moim XAML pliku, mam następujące pola tekstowe:

<TextBox x:Name="TextBox1" Text="{Binding Value, Mode=TwoWay}" Foreground="Black" Background="Green" SelectionChanged="TextBox1_SelectionChanged" /> 

<TextBox x:Name="TextBox2" Text="{Binding Value, Mode=TwoWay}" Foreground="Black" Background="Green" SelectionChanged="TextBox2_SelectionChanged" /> 

W moim .cs, mam następujące metody:

void TextBox1_SelectionChanged(object sender, RoutedEventArgs e) 
{ 
    TextBox t = e.Source as TextBox 
} 

mogę succe ssfully uderz w powyższy program obsługi zdarzeń. Następnie mogę pobrać TextBox1 i jego właściwości za pomocą e.Source, ale chciałbym uzyskać dostęp do TextBox2 i jego właściwości.

Jak sidenote The .cs plik jest tylko C# klasa że ja przedstawieniu, a nie xaml.cs. Ponadto rozumiem, że mogę to zaimplementować poprzez UserControl, ale nie można tego zrobić w tym scenariuszu z powodów, które wykraczają poza zakres tego wpisu.

Proszę doradzić, w jaki sposób mogę uzyskać/ustawić właściwości TextBox2.

Dzięki.

EDYCJA: Jakieś inne wejście na tym? Aby obejść ten problem, dodałem procedurę obsługi zdarzenia o nazwie TextBox2_Loaded, a następnie ustawię źródło e.Source na zmienną instancji. Następnie w TextBox1_SelectionChanged, mam dostęp do zmiennej instancji. Naprawdę chciałbym bezpośrednio kierować kontrolę (np. TextBox2.IsEnabled). Musiałem gdzieś pominąć deklarację lub dziedziczenie. Nie można nawet znaleźć kontroli za pomocą funkcji FindName.

+0

używasz textbox2 jako elementu powtarzającego się kontrolka (gridview, listview..etc)? –

+0

Nie, nie używam widoku siatki lub listwy – Josh

Odpowiedz

3

porządku, więc najwyraźniej pominięte kluczowy komponent w tym poście ... Moje elementy sterujące TextBox znajdują się w elementach sterujących DataTemplate. Z moich badań nie można uzyskać dostępu do formantów TextBox, gdy znajdują się one w elementach sterujących DataTemplate. Naprawdę nie sądziłem, że to ma znaczenie, ale domyślam się, że zmienne instancji nie są tworzone, gdy ten scenariusz istnieje.

Jeśli interpretowałem to niepoprawnie, proszę podać dane wejściowe. Na razie dodałem zdarzenie Loaded i zdefiniowałem formanty TextBox jako zmienne instancji, dzięki czemu mogę uzyskać do nich dostęp i zmienić właściwości w przypadku wystąpienia innych działań.

Dzięki za opinie wszystkich.

+0

Oczywiście, nie możesz uzyskać dostępu do nazwanego komponentu z DataTemplate, nawet w załadowanym wydarzeniu. Musisz złapać instancję swojego fabrycznego komponentu UI. – Ouarzy

3

Dopóki masz ustawić namein XAML, można do niego dostęp bezpośrednio przez nazwę (Kompilator XAML utworzy zmienną instancji dla ciebie.)

void TextBox1_SelectionChanged(object sender, RoutedEventArgs e) 
{ 
    TextBox t = e.Source as TextBox 
    TextBox2.Text = "Whatever"; 
} 
+0

Z jakiegoś powodu nie mogę używać TextBox2. Intellisense nie wyświetla go, a kompilator uważa, że ​​jest niezdefiniowany. Czy muszę odziedziczyć moją klasę z czegoś? public partial class Custom:? – Josh

+0

Spróbuj wykonać kompilację, aby Studio mogło zobaczyć pola utworzone przez kompilator Xaml. EDYTOWAĆ. Tak, twój kod powinien być klasą częściową, która pasuje do twojego XAML. – GazTheDestroyer

+0

Czy potwierdzasz, że moja definicja mojej klasy jest poprawna lub czy muszę coś odziedziczyć? Ponadto kilka razy zbudowałem swój projekt. – Josh

0

To mi się po prostu przydarzyło. Musiałem zamknąć moje rozwiązanie i ponownie je otworzyć.

Powiązane problemy