2010-03-26 2 views
6

я стиль применяется ко всем моим, определенных текстовых в словаре ресурсов ..Невозможно переопределить глобальный стиль WPF, устанавливаемое TargetType на один конкретный контроль

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

В FontSize и FontStyle свойства привязаны к специальному классу пользовательских настроек, который реализует iNotifyPropertyChanged, что позволяет изменять размер шрифта и fontfamily для немедленного распространения по всему моему приложению.

Однако в UserControl, который я создал (по иронии судьбы, экран, который позволяет пользователю настраивать свои настройки шрифта), я хочу, чтобы размер шрифта и fontfamily оставался статичным. Независимо от того, что я стараюсь, мои глобальные настройки шрифта не переопределять то, что я установить в своем пользовательском элементе управления:

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

... и т.д. ...

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

Я пробовал настройки Стиль для {x: Null}, установка настраиваемых размеров шрифта в строке и установка стиля в ресурсах этого элемента управления. Ни один из них не имеет приоритета над стилями в моем ресурсном словаре.

Как вы можете видеть, я показываю окропление всех вещей, которые я пробовал в образце XAML выше ...

Что мне не хватает?

ответ

1

Хорошо, я вижу, что происходит сейчас.

В конструкторе моего UserControl я даже попытался установить .Style = Nothing, просто чтобы узнать, что произойдет ... и мой глобальный стиль STILL появился и применил себя.

Я должен предположить, что глобальный стиль применяется к моим элементам управления ПОСЛЕ запуска конструктора, и поэтому глобальный стиль вторгается в любом случае. В конце концов, я просто переместил «глобальный» стиль в место, где он будет влиять только на то, что мне нужно.

Менее удобно, но, по крайней мере, я могу двигаться дальше в моем проекте

1

Другой альтернативой является добавление пустого стиля на UserControl, такие как:

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

Это блокирует глобальный стиль - может также добавить к ресурсам StackPanel тонкоуровневого управления

  • более exmplanation here