Похоже, все должно быть просто. У меня есть Page
, объявленный в XAML обычным способом (то есть с "Добавить новый элемент ..."), и у него есть пользовательское свойство. Я хотел бы установить это свойство в XAML, связанном со страницей.
Попытка сделать это так же, как я установил бы любое другое свойство, не работает, по причинам, которые я понимаю, но не знаю, как обойти. Просто у нас есть что-то конкретное, о чем можно поговорить, вот несколько (недействительных) XAML. Я максимально сократил все - изначально были такие атрибуты, как размер дизайнера, но я считаю, что они не имеют отношения к тому, что я пытаюсь сделать.
<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>
и соответствующий код:
using System.Windows.Controls;
namespace WpfSandbox {
public partial class TestPage : Page {
public TestPage() {
InitializeComponent();
}
public string MyProperty { get; set; }
}
}
Сообщение об ошибке:
Ошибка 1 Свойство 'MyProperty' не существует в пространстве имен XML
http://schemas.microsoft.com/winfx/2006/xaml/presentation'. Строка 4, Позиция 7.
Теперь я знаю, почему это не удается: элемент имеет тип Page
, а Page
не имеет свойства с именем MyProperty
. Это только объявлено в TestPage
..., который указан атрибутом x:Class
, но не самим элементом. Насколько мне известно, эта конфигурация требуется моделью обработки XAML (то есть интеграцией Visual Studio и т. Д.).
Я подозреваю, что я мог бы обработать это с помощью свойства зависимости, но это немного похоже на излишество. Я также мог бы использовать существующее свойство (например, DataContext
), а затем скопировать значение в пользовательское свойство в коде позже, но это было бы довольно уродливо.
Выше приведен пример WPF, но я подозреваю, что те же ответы применимы и в Silverlight. Меня интересуют оба - поэтому, если вы разместите ответ, который, как вы знаете, будет работать в одном, а не в другом, я был бы признателен, если бы вы указали это в ответе:)
Я готовлюсь пнуть себя, когда кто-то публикует абсолютно тривиальное решение ...