2009-10-19 13 views
5

Mam styl bloku tekstu, który jest ustawiony wewnątrz mojej app.xaml to jest następnie stosowane do textblocked przez moją aplikację i działa dobrze.Styl App.xaml nie może być użyty w UserControl, jak to możliwe?

Jednak pojawia się błąd: "nie można utworzyć wystąpienia typu", jeśli zastosuję ten styl do bloku tekstu w ramach kontroli użytkownika, dlaczego to problem?

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

Dzięki, 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> 

Odpowiedz

10

Zasadniczo , nie może znaleźć StaticResource, ponieważ nie znajduje się w pliku z kontrolą użytkownika. UserControl.xaml nie wie nic o App.xaml.

Zamiast tego należy użyć DynamicResource, w ten sposób zostanie zastosowany w czasie wykonywania.

+0

Zmieniłem na DynamicResource zgodnie z sugestią i działa, działa również, jeśli ustawię styl w Po prostu nie interesuje mnie, w jaki sposób zakres App.Config nie dociera do UserControl, ale dociera do wszystkich kontrolek na dowolnej stronie lub oknie? – 4imble

+2

zasadniczo musisz myśleć o UserControl jako jednostce autonomicznej. Może na przykład mieszkać w innym zespole. Kontrola niestandardowa działa w ten sam sposób. Wiedzą tylko, co im mówisz. Idealnie byłoby umieścić swoje style w ResourceDicationary i dołączyć je tam, gdzie ich potrzebujesz - App.xaml, kontrola użytkownika itp. Ułatwia to "skórze" lub "motywowanie" twoich rzeczy - po prostu zamień zasób słowniki. –

+0

Ahh, okej. Ma sens. Dzięki – 4imble

4

Poprzednia odpowiedź jest całkowicie niepoprawna. Zdecydowanie można definiować zasoby na poziomie aplikacji i odwoływać się do nich z poziomu UserControls. W rzeczywistości może to często zwiększyć wydajność, aby zapobiec duplikacji zasobów. Zasoby aplikacji są sprawdzane jako 3 na liście zasobów statycznych zgodnie z opisem podanym w pozycji this page pod nagłówkiem "Static resource lookup behavior".

Zgaduję, że masz literówkę lub jakiś inny problem powodujący błąd. Czy możesz opublikować kod app.xaml?

+0

Dodanie kodu zgodnie z żądaniem wydaje się dziwne, ponieważ powodowało błąd jako normalny zasób, a następnie działa, jeśli przydzielę go do lokalnego zasobu lub sprawię, że będzie dynamiczny. – 4imble

+0

Skopiowany kod dosłownie i kompilacje/działa bez żadnych błędów. Czy masz więcej szczegółów na temat błędu, który otrzymałeś? –

+0

Uwaga: Usunąłem wiązania w UserControl, ponieważ nie chciałem spędzać czasu na implementację właściwości.Może to jest źródło problemu? –

Powiązane problemy