2010-03-26 13 views
6

mam styl zastosowany do wszystkich moich tekstowych, zdefiniowanych w słowniku zasobów ..nie mogą zastąpić globalny styl WPF, który jest ustawiony przez TargetType na jednej konkretnej kontroli

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

The fontSize i właściwości fontStyle są powiązane ze specjalną klasą ustawień użytkownika, która implementuje iNotifyPropertyChanged, która umożliwia zmiany rozmiaru czcionki i rodziny czcionek, aby natychmiast przesłać ją do mojej aplikacji.

Jednak w utworze UserControl, które utworzyłem (Jak na ironię ekran, który pozwala użytkownikowi dostosować ustawienia czcionki), chcę, aby rozmiar czcionki i rodzina czcionek pozostały statyczne. Bez względu na to, co staram moje globalne ustawienia czcionki przesłonić tego, co się w moją kontrolą użytkownika:

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

... itd ...

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

Próbowałem ustawienie Styl: {x: Null}, ustawienie niestandardowych rozmiarów czcionek w linii i ustawienie stylu w zasobach tego elementu sterującego. Żadne nie ma pierwszeństwa przed stylami w moim słowniku zasobów.

Jak widać, pokażę spryskiwania wszystkich rzeczy próbowałem w próbce XAML powyżej ...

Czego mi brakuje?

Odpowiedz

1

Ok Widzę, co się teraz dzieje.

W konstruktorze dla mojego UserControl, próbowałem nawet ustawić .Style = Nic, tylko po to, aby zobaczyć, co się stanie ... a mój globalny styl był NASTĘPNY, który nadchodził i się stosował.

Muszę założyć, że styl globalny jest stosowany do moich elementów sterujących PO zakończeniu pracy konstruktora, a co za tym idzie, globalny styl wnika. Ostatecznie po prostu przeniosłem styl "globalny" do miejsca, w którym będzie to miało wpływ tylko na to, czego potrzebuję.

mniej wygodne, ale przynajmniej mogę poruszać się w moim projekcie

1

Inną alternatywą jest dodanie pustego styl na UserControl, takie jak:

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

który blokuje globalny styl - może również dodać je do zasobów stackpanel dla drobniejszej szczegółową kontrolę

  • dłuższy exmplanation here
Powiązane problemy