2010-03-26 11 views
6

Ich habe ein Stil angewendet, um alle meine Textfelder, definiert in einem Ressourcenverzeichnis ..Kann keine globale WPF Stil außer Kraft, die Targettype auf einer einzigen spezifischen Steuer

<Style TargetType="TextBlock"> 
     <Setter Property="TextBlock.FontSize" Value="{Binding Source={StaticResource ApplicationUserSettings}, Path=fontSize, Mode=OneWay}" /> 
     <Setter Property="TextBlock.TextWrapping" Value="Wrap" /> 
     <Setter Property="TextBlock.VerticalAlignment" Value="Center"/> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="TextBox.FontFamily" Value="{Binding Source={StaticResource ApplicationUserSettings}, Path=fontName, Mode=OneWay}"/> 
    </Style>\ 

Die Schriftgröße und Schriftstil Eigenschaften gesetzt sind an eine spezielle Benutzereinstellungen-Klasse gebunden, die iNotifyPropertyChanged implementiert, wodurch Änderungen der Schriftgröße und fontfamily sofort in meiner gesamten Anwendung weitergegeben werden können.

In einem UserControl, das ich erstellt habe (Ironischerweise der Bildschirm, der dem Benutzer erlaubt, ihre Schriftarteinstellungen anzupassen), möchte ich die Schriftgröße und fontfamily statisch bleiben. Egal, was ich versuche, außer Kraft setzen meine globalen Schrifteinstellungen, was ich in meiner Benutzersteuerung gesetzt:

<UserControl x:Class="ctlUserSettings" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:R2D2" Height="400" Width="600"> 

<Grid> 

    <Grid.Resources> 
     <Style x:Key="tbxStyle" TargetType="TextBox"> 
      <Style.Setters> 
       <Setter Property="FontSize" Value="14"/> 
       <Setter Property="FontFamily" Value="Tahoma"/> 
      </Style.Setters> 
     </Style> 

... etc ...

  <StackPanel Margin="139,122.943,41,0" Orientation="Horizontal" Height="33" VerticalAlignment="Top"> 
      <TextBox Style="{x:Null}" FontSize="13" FontFamily="Tahoma" HorizontalAlignment="Left" MaxWidth="500" MinWidth="350" Name="txtReaderPath" Height="Auto" VerticalAlignment="Top" /> 
      <TextBox Style="{x:tbxStyle}" Margin="15,0,0,0" HorizontalAlignment="Left" Name="txtPath" Width="43" Height="23" VerticalAlignment="Top">(some text)</Button> 
     </StackPanel> 

Ich habe versucht Einstellung Stil zu {x: Null}, Festlegen von benutzerdefinierten Schriftgrößen inline und Festlegen eines Stils in den Ressourcen dieses Steuerelements. Keine hat Vorrang vor den Stilen in meinem Ressourcenwörterbuch.

Wie Sie sehen können, zeige ich eine Prise von all dem, was ich in der XAML-Probe oben versucht haben ...

Was bin ich?

Antwort

1

Ok ich sehe, was jetzt passiert.

Im Konstruktor für mein UserControl habe ich sogar versucht, .Style = Nothing zu setzen, nur um zu sehen, was passieren würde ... und mein globaler Stil war immer noch dabei, sich anzumelden.

Ich muss davon ausgehen, dass der globale Stil auf meine Steuerelemente angewendet wird, nachdem der Konstruktor ausgeführt wird, und als solche den globalen Stil eindringt. Am Ende habe ich den "globalen" Stil einfach an einen Ort verschoben, an dem er nur das bewirkt, was er braucht.

Weniger bequem, aber zumindest kann ich in meinem Projekt weitergehen

1

Eine weitere Alternative ist einen leeren Stil auf dem Usercontrol wie hinzuzufügen:

<UserControl.Resources> 
     <Style TargetType="TextBlock" /> 
</UserControl.Resources> 

Das blockiert der globale Stil - kann auch fügen sie die Stackpanel Ressourcen für feinkörnige Kontrolle

  • mehr exmplanation here