2009-11-02 18 views
6

Tôi có một bộ điều khiển được liên kết với dữ liệu, mà tôi muốn chương trình thêm xác thực vào các ràng buộc. Hiện tại, tôi có thể lặp qua cây trực quan để tìm các điều khiển đó bằng các ràng buộc và cũng thêm các trình kiểm chứng của tôi vào các điều khiển này. Nhưng để xác định thêm các điều khiển nào cần phải xác thực cụ thể, tôi muốn sử dụng các kiểu. Vì vậy, XAML của tôi trông như thế này:Đưa ra một WPF DependencyObject theo kiểu, làm cách nào tôi có thể lấy Khóa Kiểu trong mã?

<TextBox Name="someTextBox" Style="{StaticResource optionalNumericTextBox}" /> 

Ở đây, optionalNumericTextBox phong cách phục vụ cả hai thêm một mẫu xác nhận lỗi và như là một trang trí để cho biết rằng hộp này cần phải có xác nhận số tùy chọn áp dụng.

Sự cố xảy ra khi tôi duyệt qua cây thị giác, phát hiện ra một điều khiển với các ràng buộc và sau đó cần xác định kiểu được sử dụng. Hiện nay tôi đã cố gắng

dependencyObject.GetValue(FrameworkElement.StyleProperty) 

mà mang lại cho tôi a Style đối tượng nhưng như xa như tôi có thể nói, đối tượng này không mang 'optionalNumericTextBox' giá trị . Thậm chí có thể xác định khóa hoặc thông tin này có bị mất trong trình đọc XAML không?

Trả lời

5

Khi sử dụng StaticResourceExtension, thông tin này sẽ bị mất vào thời gian biên dịch khi chuyển đổi XAML thành BAML. Sử dụng DynamicResourceExtension, mặt khác, giữ chìa khóa xung quanh để tài nguyên có thể được giải quyết trong thời gian chạy. Để có được chìa khóa, bạn sẽ cần phải sử dụng ReadLocalValue():

//this gets the Style 
var s = textbox.GetValue(TextBox.StyleProperty); 
//this gets a ResourceReferenceExpression 
var l = textbox.ReadLocalValue(TextBox.StyleProperty); 

Vấn đề là, ResourceReferenceExpression là một loại nội bộ, vì vậy bạn sẽ cần phải sử dụng phản ánh để kéo ra chìa khóa.

Để thay thế cho tất cả điều này, bạn đã xem xét xâm nhập thuộc tính Tag thay thế?

<Style x:Key="optionalNumericTextBox" TargetType="TextBox"> 
    <Setter Property="Tag" Value="optionalNumericTextBox"/> 
</Style> 

Sau đó, mã của bạn có thể chỉ cần kiểm tra thuộc tính Tag trên TextBox.

+0

Mẹo tuyệt vời ở đó, sử dụng trình thiết lập thuộc tính. Trên thực tế đã chỉ cho tôi theo hướng sử dụng thuộc tính đính kèm thay vì Thẻ. Vì vậy, bây giờ tôi sử dụng một cái gì đó như: Làm việc như một sự quyến rũ! –

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