Ресурсы, определенные в UserControl.Resources, не могут видеть элементы, определенные в MergedDictionaries, установленные из кода - PullRequest
0 голосов
/ 05 июля 2011

DefaultStyle s содержит DefaultStyle для всех TextBox es:

public partial class UserControl1 : UserControl
{
    public UserControl1()
    {
        Resources.MergedDictionaries.Add(new DefaultStyles());
        InitializeComponent();
    }
}

Тогда Xaml, я наследую стиль и добавлю немного больше:

<UserControl.Resources>
    <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
        <Setter Property="Foreground" Value="Green "/>
    </Style>
</UserControl.Resources>

Это выдает StackOverFlowException, так как мой DefaultStyle не найден, и поэтому он пытается самостоятельно ссылаться.

Почему стиль не видит стили по умолчанию в объединенном словаре?

1 Ответ

0 голосов
/ 05 июля 2011

Он не может видеть это, потому что он по сути заменяет его.Вызов метода InitializeComponent заменит словарь, на который вы ссылаетесь в ctor, на словарь, который вы определили в своем XAML.

По сути, вы делаете это неправильно.Почему ты не можешь просто сделать это:

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="DefaultStyles.xaml"/>
        </ResourceDictionary.MergedDictionaries>

        <Style TargetType="TextBox" BasedOn="{StaticResource {x:Type TextBox}}">
            ...
        </Style>
    </ResourceDictionary>
</UserControl.Resources>
...