2009-10-19 26 views
5

Benim app.xaml içinde ayarlanmış bir textblock için bir stil var, bu daha sonra benim app aracılığıyla textblocked uygulanır ve iyi çalışıyor.App.xaml stili, Usercontrol'de nasıl kullanılamaz?

Ancak bir hata alıyorum: "Bu stili, kullanıcı denetimimin içindeki bir metin bloğuna uygularsam," bu tür bir sorun nasıl olur? "

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

sayesinde Kohan

- App.xaml Kodu -

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

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

cevap

10

StaticResource'u bulamıyor, çünkü kullanıcı denetiminizdeki dosyada değil. UserControl.xaml, App.xaml hakkında hiçbir şey bilmiyor.

Bunun yerine DynamicResource kullanmalısınız, bu şekilde çalışma zamanında uygulanacaktır.

+0

Önerilen şekilde DynamicResource olarak değiştirdim ve çalışır, ayrıca stili olarak ayarladığımda da çalışır. Niçin ilgisi yok, App.Config'ın kapsamı nasıl olur? bir UserControl ulaşmaz, ancak herhangi bir sayfa veya pencerede tüm kontrollere ulaşır? – 4imble

+2

temel olarak, bir UserControl'ü bağımsız bir varlık olarak düşünmelisiniz. Örneğin, farklı bir mecrada yaşayabilir. Bir Özel Kontrol aynı şekilde çalışır. Sadece onlara ne söylediğini biliyorlar. İdeal olarak, stillerinizi bir ResourceDicationary içine koyarsınız ve onlara ihtiyacınız olan yerlere (App.xaml, kullanıcı kontrolünüz vb.) Dahil olursunuz. Bu, malzemelerinizi "cildi" veya "teması" kolaylaştırır - sadece kaynağı değiştirir sözlükleri. –

+0

Ahh, tamam. Mantıklı. Teşekkürler – 4imble

4

Önceki yanıt kesinlikle yanlıştır. Kaynakları kesinlikle uygulama düzeyinde tanımlayabilir ve bunları UserControls içinden gönderebilirsiniz. Aslında, bu çoğu zaman kaynak çoğaltmasını önlemek için performansı artırabilir. Uygulama kaynakları, "Statik kaynak arama davranışı" başlığı altında this page numaralı belgede açıklandığı gibi Statik Kaynaklar listesinde 3. sırada denetlenir.

Hata yaptığınızda bir yazım hatası veya başka bir sorun olduğunu tahmin ediyorum. App.xaml kodunu gönderir misiniz?

+0

İstenilen kodu ekledim, normal bir kaynak olarak hataya neden oluyordu ve yerel bir kaynakta atayım veya dinamik hale getirirsem çalışır. – 4imble

+0

Kopya kod yazılır ve hata olmadan çalışır/çalışır. Aldığınız hatayla ilgili daha fazla ayrıntı var mı? –

+0

Not: Özellikleri uygulamak için zaman harcamak istemediğimden UserControl'deki bağlamaları kaldırdım.Belki sorunun kaynağı budur? –