2010-02-05 14 views
7

TextBlock üzerinde varsayılan stili ayarlamak, Label'deki stilin ve diğer kontrollerin de ayarlanmasına neden olur. Bu sadece stilleri Uygulama kaynaklarına yerleştirirseniz, stili Pencere kaynaklarına yerleştirdiğimde her şey yolunda olur.WPF Bir TextBlock üzerinde varsayılan stilin ayarlanması, bir Etiketin stilini geçersiz kılar.

Ayrıca VS 2008 Designer ve XamlPadX etiketini beklediğiniz gibi görüntülediğini buldum, ancak sorun yalnızca uygulamayı gerçek hayatta yürütürseniz ortaya çıkar.

<Application x:Class="WpfApplication.App" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    StartupUri="Window1.xaml"> 
    <Application.Resources> 
     <ResourceDictionary> 
      <Style TargetType="TextBlock"> 
       <Setter Property="FontSize" Value="8"/> 
      </Style> 

      <Style x:Key="Title" TargetType="Label"> 
       <Setter Property="FontSize" Value="32"/> 
      </Style> 
     </ResourceDictionary> 
    </Application.Resources> 
</Application> 

<Window x:Class="WpfApplication.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Height="300" 
     Title="Window1" 
     Width="300"> 
    <StackPanel> 

     <TextBlock Text="TextBlock No Style" Style="{x:Null}"/> 
     <Label Content="Label No Style" Style="{x:Null}"/> 

     <TextBlock Text="Default TextBlock"/> 
     <Label Content="Default Label" Style="{StaticResource Title}"/> 

    </StackPanel> 
</Window> 

görüntüler Yukarıdaki kod:

TextBlock No Style - Default font size (As you would expect) 
Label No Style - Size 5 font size (How did this happen?) 
Default TextBlock - Size 5 font size (As expected by my style) 
Default Label - Size 5 font size (How did this happen?) 

cevap

10

Evet bu beklenebilir; Etiket için varsayılan şablona bakın, sadece girintili bir TextBlock. Stilleri kalıtsal'dir, bu yüzden Etiket FontSize'i 32 olarak ayarlayacaktır, ancak TextBlock'un stili bunu geçersiz kılacaktır. Eğer daha önce olsaydın, 5pt olurdu.

Düzenleme: Bu şekilde çözmek istediğim, NormalText adlı TextBlock'un bir kukla alt sınıfını (yani hiçbir şeyi değiştirmeyen bir sınıf) oluşturmaktır, sonra bu stili; Bu şekilde yanlışlıkla diğer TextBlock'ları almazsınız.

İlgili konular