Creo que estoy pidiendo una conferencia sobre la correcta aplicación de WPF aquí, pero voy a arriesgarme ya que estoy al final de mi ingenio. Creo que esto es probablemente el resultado de mi letargo al adoptar completamente las plantillas y estilos de WPF, así que estoy feliz de escuchar tales conferencias.ContentControl personalizado en WPF
Estoy escribiendo una especie de editor de audio/orquestador de eventos. Tengo un editor de pistas con el que estoy bastante contento. Sin embargo, lo construí en gran medida con controles personalizados (lo sé, esto es probablemente un pecado de WPF). De acuerdo con ese tema, quiero hacer un encabezado estándar para las pistas, pero quiero que los "tipos" de pistas individuales puedan definir lo que va en ese encabezado. Pensé que un control que define una especie de "agarre" en el borde y luego le permitió al implementador "completar" la sustancia funcionaría bien. Sin embargo, no tengo idea de cómo hacer esto en WPF sin usar estilos e incluso si termino usando estilos, me gustaría entender esto.
Esto probablemente se deba a querer una especie de implementación ejemplar de un control de ContentControl simple (por ejemplo, un botón) y no poder encontrar uno (que no sea AvalonDock, que en última instancia utiliza - correctamente estoy seguro - plantillas para esto) En mi cabeza, el XAML es como la siguiente:
<ContentControl x:Class="TestArea.CustomContentControl2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="Hello"/>
<ContentPresenter Grid.Column="1"/>
</Grid>
Pero, por supuesto, eso no funciona. Estoy bastante seguro de que podría sacar lo mismo haciendo trucos con sobrecargas detrás de escena, pero sería bueno si pudiera hacer algo como esto. ¿Realmente tengo que dejar atrás todos mis caminos terribles y de procedimiento y usar estos estilos de los que hablas? Si es así, ¿alguien puede decirme al menos cómo se ve ese botón en el marco?
Este es el enfoque de estilo al que me refería. OK, cuando estés en Roma/Redmond ... – Jeff
No necesitas ir "cerdo entero" con estilos y plantillas. Esto es solo un medio para un fin: dejar que el interior sea contenido arbitrario. Así que ponga lo que tiene arriba en ControlTemplate en lugar de UserControl y el resultado final es exactamente lo que está buscando. ¡No se requiere conversión religiosa! –
El enlace está muerto. – Kilazur