Не может переопределить глобальный стиль 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, который позволяет изменения в размере шрифта и семейство шрифтов к сразу propogate всюду по моему приложению.

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

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

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

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

Что я пропускаю?

8
задан Matt H. 26 March 2010 в 16:22
поделиться

2 ответа

Хорошо, я понимаю, что сейчас происходит.

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

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

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

1
ответ дан 6 December 2019 в 00:55
поделиться

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

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

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

  • длинная эксмпланация здесь
2
ответ дан 6 December 2019 в 00:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: