2012-03-03 31 views
6

Tôi có hai tập tin trong dự án VS của tôi: Custom.xamlCustom.csTiếp cận XAML điều khiển từ C# code-behind

Trong XAML tập tin tôi, tôi có các hộp văn bản sau đây:

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

Trong tôi .cs, tôi có phương pháp sau:

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

Tôi có thể thành công ssfully nhấn xử lý sự kiện ở trên. Sau đó, tôi có thể lấy TextBox1 và thuộc tính của nó bằng cách sử dụng e.Source, nhưng tôi muốn truy cập TextBox2 và thuộc tính của nó.

Là một sidenote, các cs tập tin chỉ là một lớp C# mà tôi đang tham khảo, không phải là một xaml.cs. Ngoài ra, tôi hiểu rằng tôi có thể triển khai điều này thông qua UserControl, nhưng không thể thực hiện điều đó trong trường hợp này vì các lý do nằm ngoài phạm vi của bài đăng này.

Vui lòng tư vấn về cách tôi có thể nhận/đặt thuộc tính của TextBox2.

Cảm ơn.

EDIT: Bất kỳ đầu vào nào khác về điều này? Như một giải pháp thay thế, tôi đã thêm một trình xử lý sự kiện được gọi là TextBox2_Loaded, và sau đó đặt e.Source thành một biến cá thể. Sau đó, trong TextBox1_SelectionChanged, tôi có thể truy cập vào biến cá thể. Thực sự muốn chỉ nhắm mục tiêu điều khiển trực tiếp (ví dụ: TextBox2.IsEnabled). Tôi phải thiếu một tuyên bố hoặc thừa kế ở đâu đó. Thậm chí không thể tìm thấy điều khiển bằng FindName.

+0

là u bằng cách sử dụng hộp văn bản 2 như một mục của điều khiển lặp lại (một GridView, listview..etc)? –

+0

Không, tôi không sử dụng chế độ xem lưới hoặc danh sách xem – Josh

Trả lời

3

Được rồi, vì vậy tôi dường như đã bỏ qua một thành phần quan trọng trong bài đăng này ... Các điều khiển TextBox của tôi nằm bên trong các điều khiển DataTemplate. Từ nghiên cứu của tôi, các điều khiển TextBox không thể được truy cập khi bên trong các điều khiển DataTemplate. Tôi thực sự không nghĩ rằng đó sẽ là vấn đề, nhưng tôi đoán các biến cá thể không được tạo ra khi kịch bản này tồn tại.

Nếu tôi đã giải thích điều này không chính xác, vui lòng cung cấp đầu vào. Bây giờ, tôi đã đi trước và thêm một sự kiện Loaded và định nghĩa các điều khiển TextBox của tôi như là các biến cá thể để tôi có thể truy cập chúng và thay đổi các thuộc tính khi các hoạt động khác xảy ra.

Cảm ơn mọi người đã nhập.

+0

Tất nhiên, bạn không thể truy cập một thành phần được đặt tên từ một DataTemplate, ngay cả trong một sự kiện được nạp. Bạn cần phải nắm bắt trường hợp của Thành phần giao diện người dùng được kết hợp của bạn. – Ouarzy

3

Chừng nào bạn đã đặt namein XAML, bạn có thể truy cập trực tiếp theo tên (Trình biên dịch XAML sẽ tạo ra một biến Ví dụ cho bạn.)

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

Vì một số lý do tôi không thể sử dụng TextBox2. Intellisense không hiển thị nó và trình biên dịch nghĩ rằng nó không xác định. Tôi có cần kế thừa lớp học của mình từ một thứ gì đó không? public part class Tùy chỉnh:? – Josh

+0

Hãy thử tạo một bản dựng để Studio có thể thấy các trường mà trình biên dịch xaml sẽ tạo ra. CHỈNH SỬA. Có, mã của bạn phía sau phải là một lớp học phù hợp với XAML của bạn. – GazTheDestroyer

+0

Bạn có xác nhận rằng định nghĩa của tôi về lớp học của tôi là chính xác hoặc tôi cần phải kế thừa từ một cái gì đó? Ngoài ra, tôi đã xây dựng dự án của tôi nhiều lần. – Josh

0

Điều này đã xảy ra với tôi. Tôi phải đóng giải pháp và mở lại.

Các vấn đề liên quan