Пользовательский элемент управления WPF имеет разную направленность в режиме конструктора и запуска - PullRequest
1 голос
/ 13 марта 2019

В новом WpfApp1 я добавляю новый пользовательский элемент управления (WPF) с именем CustomButton.В его статическом конструкторе я установил задний план по умолчанию желтым.В MainWindow.xaml я добавляю CostomButton.

В конструкторе его передний план желтый (правильный).При запуске приложения передний план черный (неправильный).

Есть идеи, почему это происходит?

CustomButton.cs:

namespace WpfApp1
{
public class CustomButton : Button
{
    static CustomButton()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomButton), new FrameworkPropertyMetadata(typeof(CustomButton)));

        CustomButton.ForegroundProperty.OverrideMetadata(typeof(CustomButton),
            new FrameworkPropertyMetadata(Brushes.Yellow));
    }
}

Generic.xaml:

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1">

<Style TargetType="{x:Type local:CustomButton}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:CustomButton}">
                <Button
                    Foreground="{TemplateBinding Foreground}"
                    Content="asdf 01">
                </Button>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

MainWindow.xaml:

<Window x:Class="WpfApp1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApp1"
    mc:Ignorable="d"
    Title="MainWindow" Height="450" Width="800">
<Grid>
    <local:CustomButton Width="200" Height="100"/>
</Grid>

1 Ответ

0 голосов
/ 13 марта 2019

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

Вместо изменения переднего плана по умолчанию добавьте сеттер в стиль элемента управления по умолчанию:

<Style TargetType="local:CustomButton">
    <Setter Property="Foreground" Value="Yellow"/>
    ...
</Style>
...