Похоже, это должно быть просто. У меня есть 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. Я заинтересован в обоих - поэтому, если вы отправляете ответ, который, как вы знаете, будет работать в одном, но не в другом, я был бы признателен, если бы вы указали, что в ответ:)
Я собираюсь пинать себя, когда кто-то публикует абсолютно тривиальное решение...