Pregunta

He añadido los estilos con nombre personalizado a la App.xaml.

He creado un diccionario de recursos externos (que adjunto en los diccionarios fusionadas de la App.xaml) y cuando intento utilizar uno de los estilos anteriores nombradas en el diccionario rcource, se dice que no hay tal estilo.

también los estilos por defecto (es decir, estilos sin nombre que se aplican para toda la aplicación) no se aplican en los elementos de la plantilla.

Nota: La Acción de generación de las plantillas es 'Página'

.

Este es un ejemplo de cómo el código está escrito:

<Application x:Class="Application"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
    ShutdownMode="OnExplicitShutdown">
    <Application.Resources>
        <ResourceDictionary>

            <Style
                    x:Key="StackPanelStyle" 
                    TargetType="StackPanel" 
                    BasedOn="{StaticResource {x:Type StackPanel}}">
                <Setter Property="Margin" Value="5"/>
                <Setter Property="Orientation" Value="Horizontal" />
                <Setter Property="Height" Value="40"/>
            </Style>

            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/Templates/DataTemplate1.xaml"/>
                <ResourceDictionary Source="/Templates/DataTemplate2.xaml"/>
                <ResourceDictionary Source="/Templates/DataTemplate3.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

Este un ejemplo de la plantilla de datos:

<DataTemplate DataType="{x:Type Entity}" x:Key="NameDataTemplate">
    <Expander>
        <StackPanel>
            <--The following line produces: StackPanelStyle was not found.-->
            <StackPanel Style="{StaticResource StackPanelStyle}">
                <Label Content="Name:"/>
                <TextBox Text="{Binding Name}"/>
            </StackPanel>
        </StackPanel>
    </Expander>
</DataTemplate>

¿Alguna idea? ¿Tengo que fusionar los diccionarios de una manera diferente?

¿Fue útil?

Solución

El código no funcionará bien porque el DataTemplate en el diccionario de recursos no sabe cuál es su uso, simplemente ha sido utilizado. Al igual que el modo de Hollywood. Se compilan por separado.

Para que esto funcione, usted puede poner su estilo en el que App.xaml en el mismo diccionario de recursos de la DataTemplate o si no te gusta este acoplamiento, puede ponerlo en un diccionario de recursos diferentes, y fusionarla en el diccionario de recursos de la DataTemplate .

Otros consejos

La Acción de generación para su App.xaml debe ser ApplicationDefinition, y la acción de construcción para sus archivos de diccionario de recursos debe ser página. Supongo que tiene tanto de aquellos correcta, ya que son por defecto (y veo que usted ha mencionado acerca página ya).

No puedo pensar en ningún otro problema con su situación. Mientras se definen sus recursos estáticos en el orden correcto, que parecen ser, debería ser capaz de encontrar al ejecutar la aplicación.

Editar

Depuración idea: Crear un diccionario de recursos frescos llamado "TestDictionary.xaml" con un simple estilo de botón. Asegúrese de que este diccionario se encuentra en la misma carpeta que sus otros diccionarios (DataTemplate1.xaml, etc.). Poner un enlace a solamente TestDictionary en MergedDictionaries (comentar las otras). Poner un botón en la ventana de su puesta en marcha y aplicar el estilo. A ver si simplemente funciona. Si falla, usted sabe que tiene un problema con su combinación. Si tiene éxito, algo acerca de su DataTemplate podría ser el problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top