WPF Изменить fontSize кнопки со стилем не удается? - PullRequest
7 голосов
/ 26 ноября 2010

Ну, у меня есть файл Styles.xaml, который объединен в Application.xaml, поэтому он применим ко всем вещам ..

вот мои стили

<Style TargetType="{x:Type Control}" x:Key="baseStyle">
    <Setter Property="FontFamily" Value="Verdana"/>
    <Setter Property="FontSize" Value="12"/>
</Style>

<Style TargetType="Button" BasedOn="{StaticResource baseStyle}">
    <Setter Property="Margin" Value="2,0,2,0"/>
    <Setter Property="Padding" Value="2"/>
    <Setter Property="FontSize" Value="50"/>
</Style>

<Style TargetType="TextBlock">
    <Setter Property="FontFamily" Value="Verdana"/>
    <Setter Property="FontSize" Value="12"/>
</Style>

Кажется, что когда я в редакторе, это работает, но когда я запускаю приложение, размер шрифта кнопок уменьшается до их нормальных размеров.

Я предполагаю, что кнопки создают TextBlock, когда для их содержимого задана строка, а затем используют стиль TextBlock. Но как я могу переопределить это?

Ответы [ 2 ]

8 голосов
/ 26 ноября 2010

Вы правы насчет

Я предполагаю, что кнопки создают TextBlock, когда их содержимое установлено в строку, а затем используют стиль текстового блока

.См. this post.

Обходной путь - определить DataTemplate для System.String, где мы можем явно использовать TextBlock по умолчанию для отображения содержимого.Вы можете поместить этот DataTemplate в тот же словарь, который вы определили для стиля TextBlock, так что этот DataTemplate будет применен к любому ContentPresenter, на который влияет ваш стиль.решить проблему

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:sys="clr-namespace:System;assembly=mscorlib">
    <Style TargetType="{x:Type Control}" x:Key="baseStyle">
        <Setter Property="FontFamily" Value="Verdana"/>
        <Setter Property="FontSize" Value="12"/>
    </Style>

    <Style TargetType="{x:Type Button}" BasedOn="{StaticResource baseStyle}">
        <Setter Property="Margin" Value="2,0,2,0"/>
        <Setter Property="Padding" Value="2"/>
        <Setter Property="Foreground" Value="Red" />
        <Setter Property="FontSize" Value="50"/>
    </Style>

    <Style TargetType="{x:Type TextBlock}">
        <Setter Property="FontFamily" Value="Verdana"/>
        <Setter Property="Foreground" Value="Green" />
        <Setter Property="FontSize" Value="24"/>
    </Style>

    <DataTemplate DataType="{x:Type sys:String}">
        <TextBlock Text="{Binding}">
            <TextBlock.Resources>
                <Style TargetType="{x:Type TextBlock}"/>
            </TextBlock.Resources>
        </TextBlock>
    </DataTemplate>
</ResourceDictionary>

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

0 голосов
/ 26 ноября 2010

Я попробовал ваши стили, и это хорошо работает.Так что ваши стили не проблема.Я думаю, что это место, где вы объединили стиль, который вы написали.Вам лучше поместить свой ResourceDictionary Styles.xaml в файл MainWindow, а не в Application.xaml.

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Styles.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>

    <StackPanel>
        <TextBlock>TTT</TextBlock>
        <Button>BBB</Button>
    </StackPanel>
</Window>

Но ваша проблема остается неясной, если бы это не было решением, не могли бы вы пояснить немного больше, чем вы?использовать свои стили, разместив эту часть своего кода?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...