2009-10-19 6 views
5

Ho uno stile per un blocco di testo che è impostato all'interno della mia app.xaml, quindi viene applicato al blocco di testo attraverso la mia applicazione e funziona correttamente.Non è possibile utilizzare lo stile App.xaml in Usercontrol, come mai?

Tuttavia ottengo un errore: "impossibile creare istanza di tipo" se applico questo stile a un blocco di testo all'interno del mio controllo utente, come mai questo è un problema?

<UserControl x:Class="Client.Usercontrols.MyButton" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" MinHeight="30" MinWidth="40" 
DataContext="{Binding RelativeSource={RelativeSource Self}}"> 

<Button Width="Auto" HorizontalAlignment="Center"> 

    <Border CornerRadius="5" BorderThickness="1" BorderBrush="Transparent" > 
     <Grid> 
      <Image Name="tehImage" Source="{Binding ImageSource}" /> 
      <TextBlock Name="tehText" Text="{Binding Text}" 
       Style="{StaticResource ButtonText}" /> <-- This causes error 
     </Grid> 
    </Border> 

</Button> 

Grazie, Kohan

- Codice App.xaml -

<Application x:Class="Client.App" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    StartupUri="Mainpage.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source="Styles/CascadingStyles.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

- CascadingStyles.Xaml -

<Style TargetType="{x:Type TextBlock}" x:Key="ButtonText" > 
    <Setter Property="FontSize" Value="10" /> 
    <Setter Property="VerticalAlignment" Value="Bottom" /> 
    <Setter Property="HorizontalAlignment" Value="Center" /> 
    <Setter Property="FontFamily" Value="Lucida Sans Unicode" /> 
    <Setter Property="Foreground" Value="#0F004E" /> 
</Style> 

risposta

10

Fondamentalmente , non riesce a trovare StaticResource perché non è nel file con il controllo utente. UserControl.xaml non sa nulla di App.xaml.

Utilizzare invece DynamicResource, in questo modo verrà applicato in fase di esecuzione.

+0

Sono passato a DynamicResource come suggerito e funziona, funziona anche se imposto lo stile in Appena fuori interesse, come mai lo scope di App.Config non raggiunge un UserControl ma raggiunge tutti i controlli in qualsiasi pagina o finestra? – 4imble

+2

in pratica, devi pensare a un UserControl come entità indipendente. Potrebbe, ad esempio, vivere in un'assemblea diversa. Un controllo personalizzato funziona allo stesso modo. Sanno solo quello che dici loro. Idealmente, dovresti inserire i tuoi stili in un ResourceDicationary e includerli dove ti servono: l'app.xaml, il controllo utente, ecc. Questo rende più facile "skinare" o "tema" i tuoi contenuti - basta scambiare risorse dizionari. –

+0

Ah, okay. Ha senso. Grazie – 4imble

4

La risposta precedente è assolutamente errata. È possibile definire definitivamente le risorse a livello di applicazione e farvi riferimento da UserControls. Infatti, ciò può spesso aumentare le prestazioni per prevenire la duplicazione delle risorse. Le risorse dell'applicazione vengono controllate al terzo posto nell'elenco delle risorse statiche come descritto in this page sotto l'intestazione "Comportamento di ricerca delle risorse statiche".

Suppongo che abbiate un errore di battitura o qualche altro problema che ha causato il vostro errore. Potresti pubblicare il codice app.xaml?

+0

Aggiunto il codice come richiesto, sembra strano che stia causando l'errore come una risorsa normale e poi funziona se lo assegno in una risorsa locale o lo rendi dinamico. – 4imble

+0

Copia il codice letteralmente e crea/gira senza errori. Hai maggiori dettagli sull'errore che stavi ricevendo? –

+0

Nota: ho rimosso i binding in UserControl poiché non volevo dedicare il tempo necessario all'implementazione delle proprietà.Forse questa è la fonte del problema? –

Problemi correlati