Điều này nghe có vẻ đơn giản. Tôi có một số Page
được khai báo trong XAML theo cách thông thường (tức là với "Thêm mục mới ...") và nó có thuộc tính tùy chỉnh. Tôi muốn đặt thuộc tính đó trong XAML được liên kết với trang.Đặt thuộc tính tùy chỉnh trong trang WPF/Silverlight
Cố gắng làm điều này theo cùng cách mà tôi muốn đặt bất kỳ thuộc tính nào khác không hoạt động, vì lý do tôi hiểu nhưng không biết cách làm việc vòng. Vì vậy, chúng tôi đã có một cái gì đó cụ thể để nói về, đây là một số (không hợp lệ) XAML. Tôi đã giảm tất cả mọi thứ xuống càng nhiều càng tốt - ban đầu có những thuộc tính như kích thước thiết kế, nhưng tôi tin rằng những thứ đó không liên quan đến những gì tôi đang cố gắng làm.
<Page x:Class="WpfSandbox.TestPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
MyProperty="MyPropertyValue">
</Page>
và code-behind tương ứng:
using System.Windows.Controls;
namespace WpfSandbox {
public partial class TestPage : Page {
public TestPage() {
InitializeComponent();
}
public string MyProperty { get; set; }
}
}
Thông báo lỗi:
Lỗi 1 Thuộc tính 'myProperty' không tồn tại trong không gian tên XML 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'. Dòng 4 Chức 7.
Bây giờ tôi biết tại sao điều này là không: nguyên tố này là loại Page
, và Page
không có một tài sản gọi là MyProperty
. Nó chỉ được khai báo trong TestPage
... được xác định bởi thuộc tính x:Class
, nhưng không phải bởi chính phần tử đó. Theo tôi biết, cấu hình này được yêu cầu bởi mô hình xử lý XAML (tức là tích hợp Visual Studio, v.v.).
Tôi nghi ngờ mình có thể xử lý điều này với thuộc tính phụ thuộc, nhưng điều đó có vẻ hơi quá mức. Tôi cũng có thể sử dụng thuộc tính hiện tại (ví dụ: DataContext
) và sau đó sao chép giá trị vào thuộc tính tùy chỉnh trong mã sau, nhưng điều đó sẽ khá xấu.
Ở trên là ví dụ WPF, nhưng tôi nghi ngờ các câu trả lời tương tự sẽ áp dụng trong Silverlight. Tôi quan tâm cả hai - vì vậy nếu bạn đăng một câu trả lời mà bạn biết sẽ làm việc trong một nhưng không phải là khác, tôi sẽ biết ơn nếu bạn chỉ ra rằng trong câu trả lời :)
Tôi đang chuẩn bị tự khắc phục khi ai đó đăng một giải pháp hoàn toàn tầm thường ...
"MyProperty" trong phần tử xaml 'Page' có cần một không gian tên xml không? Chẳng hạn như "' x: MyProperty' "? (Không phải theo nghĩa đen, nhưng tương tự). Điểm là nó không có trong không gian tên đó, vậy các vùng tên khác mà nó đang kiểm tra là gì? –
@Filip: Tôi không tin rằng đó thực sự là một bản sao của câu hỏi đó, đang nói về các thuộc tính đính kèm. Vấn đề ở đây là thuộc tính mà tôi đang cố gắng thiết lập là một thuộc tính của lớp * thực tế * hiệu quả hơn là thuộc tính được khai báo bởi phần tử. Tôi có thể sai, tất nhiên. –
Wow .. Jon Skeet đã có một cuộc bỏ phiếu gần! Những gì được thế giới sắp tới?? – Arcturus