¿Es posible establecer código detrás de un diccionario de recursos en WPF? Por ejemplo, en un control de usuario para un botón, lo declara en XAML. El código de manejo de eventos para el clic del botón se realiza en el archivo de código detrás del control. Si tuviera que crear una plantilla de datos con un botón, ¿cómo puedo escribir el código del controlador de eventos para hacer clic en el botón dentro del diccionario de recursos?
147
Respuestas:
Creo que lo que estás preguntando es si quieres un archivo de código subyacente para un ResourceDictionary. ¡Puedes hacer esto totalmente! De hecho, lo haces de la misma manera que para una ventana:
Digamos que tiene un ResourceDictionary llamado MyResourceDictionary. En su archivo MyResourceDictionary.xaml, coloque el atributo x: Class en el elemento raíz, así:
Luego, cree un código detrás del archivo llamado MyResourceDictionary.xaml.cs con la siguiente declaración:
Y tu estas listo. Puede poner lo que desee en el código: métodos, propiedades y controladores de eventos.
== Actualización para aplicaciones de Windows 10 ==
Y en caso de que estés jugando con UWP, hay una cosa más a tener en cuenta:
fuente
x:Class="MyCompany.MyProject.MySubFolder1.MyResourceDictionary"
De lo contrario, si simplemente coloca x: Class = "MyResourceDictionary", el analizador xaml no encontrará su clase.No estoy de acuerdo con "ageektrapped" ... usar el método de una clase parcial no es una buena práctica. ¿Cuál sería el propósito de separar el Diccionario de la página entonces?
Desde un código subyacente, puede acceder al elemento ax: Name utilizando:
Usted puede hacer esto en el método OnApplyTemplate si quieres transmisión en circuito con los controles Una vez cargada de control personalizado. OnApplyTemplate necesita ser anulado para hacer esto. Esta es una práctica común y permite que su estilo permanezca desconectado del control. (El estilo no debe depender del control, pero el control debe depender de tener un estilo).
fuente
Gishu: si bien esto puede parecer una "práctica que generalmente no se recomienda" Aquí hay una razón por la que es posible que desee hacerlo:
El comportamiento estándar de los cuadros de texto cuando obtienen el foco es que el cursor se coloque en la misma posición que estaba cuando el control perdió el foco. Si prefiere en toda su aplicación que, cuando el usuario se dirija a cualquier cuadro de texto, se resalte todo el contenido del cuadro de texto, entonces agregar un controlador simple en el diccionario de recursos sería suficiente.
Cualquier otra razón por la que desee que el comportamiento predeterminado de interacción del usuario sea diferente del comportamiento listo para usar parece ser un buen candidato para un código detrás en un diccionario de recursos.
Totalmente de acuerdo en que cualquier cosa que sea específica de la funcionalidad de la aplicación no debe estar en un código detrás de un diccionario de recursos.
fuente
XAML es para construir gráficos de objetos que no contienen código.
Una plantilla de datos se usa para indicar cómo se debe representar un objeto de usuario personalizado en la pantalla ... (por ejemplo, si es un elemento de cuadro de lista) el comportamiento no es parte del área de especialización de una plantilla de datos. Redibujar la solución ...
fuente