2011-10-13 27 views
5

Estoy tratando de cargar el estilo WPF desde otro archivo en realidad desde la Biblioteca de control personalizado de WPF pero no estoy cargando esta es mi solución.Cargando el estilo WPF desde el archivo de recursos

La solución contiene dos proyectos

  1. WpfTestControls de Tipo WPF Biblioteca control personalizado

  2. WpfTestApp de tipo WPF biblioteca de aplicaciones que tiene referencia a WpfTestControls

MainWindow.xaml de la Biblioteca de aplicaciones de WPF

<Window.Resources> 
    <Style x:Key="TempStyle" TargetType="{x:Type TextBox}"> 
     <Setter Property="BorderBrush" Value="Green"/> 
    </Style> 
</Window.Resources> 
<Grid> 
    <TextBox Height="50px" Width="100px" Style="{DynamicResource TempStyle}"/> 
</Grid> 

Generic.xaml de WPF control personalizado Biblioteca Biblioteca

<ResourceDictionary 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<ResourceDictionary.MergedDictionaries> 
    <ResourceDictionary Source="/WpfTestControls;component/TextBoxStyle.xaml"/> 
</ResourceDictionary.MergedDictionaries> 

TextBoxStyle.xaml de WPF control personalizado

<ResourceDictionary 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
<Style x:Key="TempStyle" TargetType="{x:Type TextBox}"> 
    <Setter Property="BorderBrush" Value="Green"/> 
</Style> 

Mi archivo AssemblyInfo.cs contiene la siguiente

[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located 
//(used if a resource is not found in the page, 
// or application resource dictionaries) 
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located 
//(used if a resource is not found in the page, 
// app, or any theme specific resource dictionaries))] 

Pero todavía estoy fallando para cargar el estilo. Si estoy usando el no utilizar el buen trabajo de todo Generic.xaml por ejemplo, funciona el siguiente código como se esperaba

<Window x:Class="WpfTestApp.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 

<Window.Resources> 
    <Style x:Key="TempStyle" TargetType="{x:Type TextBox}"> 
     <Setter Property="BorderBrush" Value="Green"/> 
    </Style> 
</Window.Resources> 
<Grid> 
    <TextBox Height="50px" Width="100px" Style="{StaticResource TempStyle}"/> 
</Grid> 

¿Qué estoy haciendo mal? Gracias de antemano

Respuesta

5

Por favor, conteste algunas cosas para mí ...

  1. es "Biblioteca de controles WPF personalizado" asamblea mismo que el montaje "WpfTestControls"?
  2. Si no es así, ¿la "Biblioteca de control personalizado de WPF" tiene una referencia al ensamblado "WpfTestControls"?
  3. ¿Su WpfTestApp tiene una referencia a los ensambles "WPF Custom Control Library" y "WpfTestControls"?

Si agrega esa referencia (s), los recursos deberían cargarse correctamente.

Mis pasos ...

  1. Añadir una "Biblioteca de controles WPF personalizado" decir "ThemesLibray"
  2. En este complemento dos diccionarios de recursos en "Temas" carpeta

TextBoxStyle.xaml

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Style x:Key="GreenTextBoxStyle" TargetType="{x:Type TextBox}"> 
     <Setter Property="Background" Value="Green"/> 
    </Style> 
</ResourceDictionary> 

Generic.xaml

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="TextBoxStyle.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
  1. tengo principal proyecto starup "MyWPFTestApp" que tiene referencia de ensamblado a ThemesLibray. En la ventana que tiene ThemesLibrary recursos fusionaron esta manera ....

    <Window x:Class="MyWPFTestApp.Window7" 
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         Title="Window7" Height="300" Width="300"> 
        <Window.Resources> 
         <ResourceDictionary> 
          <ResourceDictionary.MergedDictionaries> 
           <ResourceDictionary 
            Source="/ThemseLibrary;component/Themes/Generic.xaml"/>  
          </ResourceDictionary.MergedDictionaries>    
         </ResourceDictionary> 
        </Window.Resources> 
        <Grid> 
         <TextBox Style="{StaticResource GreenTextBoxStyle}"/> 
        </Grid> 
    </Window> 
    

Cuando inicio MyWPFTestApp, veo la ventana con el cuadro de texto verde.

+0

Hola Tal vez lo escribí mal pero Solution contiene dos proyectos solo WpfTestControls de tipo WPF Custom Control Library, y WpfTestApp de tipo Wpf Application que tiene dos WpfTestControls de referencia. – Robob

+0

Derecha, así que vea mi edición anterior ... –

+0

Tiene razón, pero como yo entiendo, se supone que debe funcionar con la solución anterior. Es una solución que adoptaré por ahora – Robob

1

Lo principal es: asegúrese de tener la acción de compilación de su diccionario de recursos establecida en el recurso.

Cuestiones relacionadas