У меня есть элемент управления PaneBase
, который происходит от UserControl
.Там нет XAML, это просто элемент управления.Тип UserControl
относится к типу Catel, но я все еще наблюдаю эту проблему при использовании System.Windows.Controls.UserControl
.
public class PaneBase : UserControl
{
public static readonly DependencyProperty TitleProperty =
DependencyProperty.Register("Title",
typeof(string),
typeof(PaneBase),
new PropertyMetadata(default(string)));
public string Title
{
get => (string) GetValue(TitleProperty);
set => SetValue(TitleProperty, value);
}
}
. У меня есть другой элемент управления EquationPane
, который происходит от PaneBase
и имеетXAML:
EquationPane.xaml
<local:PaneBase x:Class="EngineersToolkit.Windows.Views.Panes.EquationPane"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:catel="http://schemas.catelproject.com" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:EngineersToolkit.Windows.Views.Panes"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="Equation"
d:DataContext="{d:DesignData EquationPaneViewModel}" d:DesignHeight="450" d:DesignWidth="800"
mc:Ignorable="d">
<Grid>
<TextBox Width="150" Height="30"
Text="{Binding Equation, Mode=TwoWay}" />
</Grid>
</local:PaneBase>
EquationPane.xaml.cs
public partial class EquationPane
{
public EquationPane()
{
InitializeComponent();
DataContext = new EquationPaneViewModel();
}
}
Все это работаетдо сих пор, когда я включаю EquationPane
в окно, оно отображается нормально:
<Grid>
<panes:EquationPane Width="100" Height="100"
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
Background="Aqua" />
</Grid>

Это продолжает работать правильно, еслиЯ пытаюсь стилизовать элемент управления:
<Style TargetType="{x:Type panes:EquationPane}">
<Setter Property="Background" Value="Red" />
</Style>
Однако все начинает разваливаться, если я вместо этого нацеливаю стиль на PaneBase
.Если я изменю TargetType
на PaneBase, то стиль просто не будет применен.Однако если я переопределю метаданные свойства зависимостей в PaneBase
следующим образом:
static PaneBase()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(PaneBase),
new FrameworkPropertyMetadata(
typeof(PaneBase)));
}
Тогда элемент управления вообще прекратит рендеринг, оставив меня с пустым окном.Почему это происходит?