Свойства стиля XAML не наследуются - PullRequest
2 голосов
/ 12 мая 2019

Я сделал простой стиль для гиперссылок, предназначенных для кнопок:

<Style x:Key="Hyperlink" TargetType="{x:Type Button}">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="Foreground" Value="{StaticResource ForegroundDarkBrush}" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <TextBlock x:Name="innerText" Text="{TemplateBinding Content}" />

                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Foreground" Value="{StaticResource AppDarkBlueBrush}" />
                        <Setter TargetName="innerText" Property="TextDecorations" Value="Underline" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Моя проблема в том, что при применении к элементу управления кнопки, который установил некоторые свойства, такие как FontSize, FontWeight, FontFamily, они просто игнорируются и не работают:

<Button
    Command="{Binding OpenCommand}"
    Content="Open"
    FontSize="20"
    Style="{StaticResource Hyperlink}" />

Как сделать так, чтобы TextBlock в моем шаблоне стиля наследовал такие свойства?

редактировать

Забыл упомянуть, что свойства типа FontSize на самом деле действительно работают , но только в режиме разработки.

1 Ответ

1 голос
/ 13 мая 2019

Вы можете указать, что вы хотите, чтобы ваш текстовый блок "наследовал" некоторые свойства от Button, например:

<Style x:Key="Hyperlink" TargetType="{x:Type Button}">
    <Setter Property="Background" Value="Transparent" />
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="Foreground" Value="{StaticResource ForegroundDarkBrush}" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <TextBlock 
                  x:Name="innerText" 
                  Text="{TemplateBinding Content}" 
                  FontSize={TemplateBinding FontSize}
                  FontWeight={TemplateBinding FontWeight}
                  FontFamily={TemplateBinding FontFamily}
                  />

                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Foreground" Value="{StaticResource     AppDarkBlueBrush}" />
                        <Setter TargetName="innerText" Property="TextDecorations" Value="Underline" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
...