2010-03-26 5 views
6

he un estilo aplicado a todos mis cuadros de texto, que se define en un diccionario de recursos ..no puede anular un estilo global de WPF que se establece TargetType en un solo control específico

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

El tamaño de fuente y las propiedades fontStyle están vinculados a una clase de configuración de usuario especial que implementa iNotifyPropertyChanged, que permite que los cambios en el tamaño de fuente y la familia de fuentes se propaguen inmediatamente a través de mi aplicación.

Sin embargo, en un UserControl que he creado (irónicamente, la pantalla que permite al usuario personalizar su configuración de fuente), quiero que el tamaño de fuente y la familia de fuentes permanezcan estáticas. No importa lo que intente, mi configuración globales de fuente anulan lo que se propuso en mi control de usuario:

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

He tratado de establecer Estilo a {x: nulo}, establezca tamaños de fuente personalizados en línea y establezca un estilo en los recursos de este control. Ninguna tiene prioridad sobre los estilos en mi diccionario de recursos.

Como se puede ver, se muestra una rociada de todas las cosas que he intentado en la muestra XAML anterior ...

¿Qué me falta?

Respuesta

1

Ok, veo lo que está sucediendo ahora.

En el constructor para mi UserControl, incluso intenté establecer .Style = Nothing, solo para ver qué pasaría ... y mi estilo global TODAVÍA venía y se aplicaba solo.

Tengo que suponer que el estilo global se está aplicando a mis controles DESPUÉS de que se ejecute el constructor, y como tal, el estilo global se entromete de todos modos. Al final, simplemente moví el estilo 'global' a una ubicación donde solo afectará a lo que necesito.

menos conveniente, pero al menos puedo seguir adelante en mi proyecto

1

Otra alternativa es añadir un estilo de vacío en el control de usuario, tales como:

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

que bloquea el estilo mundial - también puede agregarlo a los recursos de StackPanel más fino control de grano

  • ya exmplanation here
Cuestiones relacionadas