2009-10-19 2 views
5

Ich habe einen Stil für einen Textblock, der in meiner app.xaml gesetzt ist, das dann auf Textblock durch meine Anwendung angewendet wird und funktioniert gut.App.xaml Stil kann nicht in Usercontrol verwendet werden, wie kommt es?

Allerdings bekomme ich einen Fehler: "konnte keine Instanz des Typs erstellen" wenn ich diesen Stil auf einen Textblock innerhalb meiner Benutzerkontrolle anwende, wie kommt es, dass dies ein Problem ist?

<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> 

Danke, Kohan

- App.xaml-Code -

<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> 

Antwort

10

Grundsätzlich Es kann die StaticResource nicht finden, weil es nicht in der Datei mit Ihrer Benutzerkontrolle ist. UserControl.xaml weiß nichts über App.xaml.

Sie sollten stattdessen DynamicResource verwenden, auf diese Weise wird es zur Laufzeit angewendet werden.

+0

Ich habe zu DynamicResource wie vorgeschlagen geändert und es funktioniert, funktioniert es auch, wenn ich den Stil in Nur aus Interesse, wie App.Config der Anwendungsbereich erreicht kein UserControl, aber es erreicht alle Steuerelemente auf jeder Seite oder in jedem Fenster? – 4imble

+2

Grundsätzlich müssen Sie sich ein UserControl als eigenständige Entität vorstellen. Es könnte zum Beispiel in einer anderen Versammlung leben. Ein benutzerdefiniertes Steuerelement funktioniert auf die gleiche Weise. Sie wissen nur, was du ihnen erzählst. Idealerweise würden Sie Ihre Styles in eine ResourceDicationary einfügen und sie dort einfügen, wo Sie sie benötigen - die App.xaml, Ihr Benutzersteuerelement usw. Dies erleichtert das "Skin" oder "Theme" Ihrer Sachen - tauschen Sie einfach Ressourcen aus Wörterbücher. –

+0

Ahh, okay. Macht Sinn. Danke – 4imble

4

Die vorherige Antwort ist absolut falsch. Sie können Ressourcen auf Anwendungsebene definitiv definieren und sie in UserControls referenzieren. In der Tat kann dies oft die Leistung erhöhen, um eine Ressourcenverdopplung zu verhindern. Die Anwendungsressourcen werden in der Liste für statische Ressourcen, wie unter this page unter der Überschrift "Statisches Ressourcen-Lookup-Verhalten" beschrieben, als 3. geprüft.

Ich vermute, Sie haben einen Tippfehler oder ein anderes Problem, das Ihren Fehler verursacht. Könnten Sie den app.xaml-Code posten?

+0

Hinzugefügt Code wie angefordert, scheint seltsam, dass es den Fehler als eine normale Ressource verursacht und funktioniert dann, wenn ich es in einer lokalen Ressource zuweisen oder es dynamisch machen. – 4imble

+0

Kopieren Code wörtlich und erstellt/läuft ohne Fehler. Haben Sie weitere Details zu dem Fehler, den Sie erhalten haben? –

+0

Hinweis: Ich habe die Bindungen in UserControl entfernt, da ich nicht die Zeit verbringen wollte, um die Eigenschaften zu implementieren.Vielleicht ist das die Ursache des Problems? –

Verwandte Themen