2013-07-17 21 views
6

Vì vậy, tôi đang làm một GUI thingy với WPF trong C#. Có vẻ như sau:(wpf) Application.Current.Resources vs FindResource

Nó không được thực hiện ngay bây giờ. Hai hàng đó là nỗ lực của tôi trong việc tạo ra một loại bảng dữ liệu và chúng được mã hóa cứng trong XAML.

Bây giờ, tôi đang triển khai thêm chức năng nút quả mới trong C#. Tôi có phong cách sau đây trong XAML mà điều chỉnh những gì những hình ảnh nền của hàng nên xem xét như:

<Style x:Key="stretchImage" TargetType="{x:Type Image}"> 
    <Setter Property="VerticalAlignment" Value="Stretch"/> 
    <Setter Property="HorizontalAlignment" Value="Stretch"/> 
    <Setter Property="Stretch" Value="Fill"/> 
</Style> 

Vì vậy, trong các mã, tôi tạo ra một hình ảnh cho mỗi cột, col0, col1col2, và nếu tôi sử dụng đoạn mã sau,

col0.Style = (Style)Application.Current.Resources["stretchImage"]; 
col1.Style = (Style)Application.Current.Resources["stretchImage"]; 
col2.Style = (Style)Application.Current.Resources["stretchImage"]; 

nó bổ sung thêm một hàng mới trông như thế này:

Như bạn có thể thấy, nó không hoàn toàn đúng ... Và kéo dài cửa sổ làm trầm trọng thêm vấn đề:

Nó dường như không được tôn trọng của phong cách "Stretch" bất động sản.

Nhưng sau đó, nếu tôi thay vì thay đổi mã tải phong cách của tôi để

col0.Style = (Style)FindResource("stretchImage"); 
col1.Style = (Style)FindResource("stretchImage"); 
col2.Style = (Style)FindResource("stretchImage"); 

Nó hoạt động đẹp:

(Một lần nữa, các ứng dụng không được hoàn thành, do đó, không lo lắng về điều đó), nhưng câu hỏi chính của tôi là: Sự khác biệt giữa Application.Current.Resources[]FindResource() là gì? Tại sao người ta dường như bỏ qua một số thuộc tính trong khi cái kia thì không? Và làm thế nào, nếu có thể, tôi có thể nhận được Application.Current.Resources[] để hoạt động bình thường không?

+1

Đăng XAML có liên quan. Tất cả những gì tôi có thể thấy ở đây là một phong cách. –

+0

Arrighty rồi: http://pastebin.com/05sKWMST – Pojo

+1

Dude, tất cả XAML của bạn đều sai. Hãy để tôi sửa chữa nó và lấy lại cho bạn. –

Trả lời

12

Tài nguyên có thể được xác định trên hầu hết mọi phần tử trong cây trực quan. FrameworkElement.FindResource() sẽ đi lên cây tìm kiếm tài nguyên ở mỗi nút, và cuối cùng làm cho nó tất cả các cách để ứng dụng. Application.Current.Resources [] bỏ qua tất cả điều này và đi thẳng cho các tài nguyên trên ứng dụng. Bạn hầu như luôn luôn muốn sử dụng FindResource() để bạn có thể ghi đè các kiểu ở các điểm khác nhau.

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