Parece que debería ser simple. Tengo un Page
declarado en XAML de la manera normal (es decir, con "Agregar nuevo elemento ...") y tiene una propiedad personalizada. Me gustaría establecer esa propiedad en el XAML asociado a la página.Establecer una propiedad personalizada dentro de una página de WPF/Silverlight
Intentar hacer esto de la misma manera que establecería cualquier otra propiedad no funciona, por razones que entiendo pero que no sé cómo evitarlo. Solo para que tengamos algo concreto de qué hablar, aquí hay algunos (inválidos) XAML. Reduje todo lo posible, originalmente había atributos como el tamaño del diseñador, pero creo que son irrelevantes para lo que estoy tratando de hacer.
<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>
y el código subyacente correspondiente:
using System.Windows.Controls;
namespace WpfSandbox {
public partial class TestPage : Page {
public TestPage() {
InitializeComponent();
}
public string MyProperty { get; set; }
}
}
mensaje de error:
de error 1 La propiedad 'MyProperty' no existe en el espacio de nombres XML 'http://schemas.microsoft.com/winfx/2006/xaml/presentation'. Línea 4 Posición 7.
Ahora sé por qué esto está fallando: el elemento es de tipo Page
y Page
no tiene una propiedad llamada MyProperty
. Eso solo se declara en TestPage
... especificado por el atributo x:Class
, pero no por el elemento en sí. Hasta donde yo sé, esta configuración es requerida por el modelo de procesamiento XAML (es decir, la integración de Visual Studio, etc.).
Sospecho que podría manejar esto con una propiedad de dependencia, pero eso se siente como un exceso. También podría usar una propiedad existente (por ejemplo, DataContext
) y luego copiar el valor en la propiedad personalizada en el código más tarde, pero sería bastante desagradable.
Lo anterior es un ejemplo de WPF, pero sospecho que se aplicarán las mismas respuestas en Silverlight. Estoy interesado en ambos, así que si publica una respuesta que sabe que funcionará en uno pero no en el otro, le agradecería que lo indicara en la respuesta :)
Estoy preparando patear a mí mismo cuando alguien publica una solución absolutamente trivial ...
¿"MyProperty" en el elemento xaml 'Page' necesita un espacio de nombres xml? Tales como "' x: MyProperty' "? (No es eso literalmente, pero es similar). Dado que no está en ese espacio de nombres, ¿qué otros espacios de nombres está revisando? –
@Filip: no creo que en realidad sea un duplicado de esa pregunta, que está hablando de propiedades adjuntas. El problema aquí es que la propiedad que intento establecer es efectivamente una propiedad de la clase * actual * en lugar de la declarada por el elemento. Podría estar equivocado, por supuesto. –
Guau .. ¡Jon Skeet consiguió un voto cercano! ¿A qué viene el mundo? – Arcturus