Странное поведение в стиле wpf? - PullRequest
0 голосов
/ 09 октября 2009

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

Я пытался максимально упростить проблему и придумал что-то настолько простое, что, боюсь, я упускаю из виду очевидное кровотечение, но, в любом случае, так оно и есть:

<Window x:Class="Example.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="100" Width="50">
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary>
                        <Style TargetType="{x:Type TextBox}">
                            <Setter Property="Background" Value="Green"></Setter>
                        </Style>
                </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>
    <StackPanel>        
        <TextBox Text="1" Name="box1"/>
        <TextBox Text="2" Name="box2"/>
        <TextBox Text="3" Name="box3"/>
    </StackPanel>
</Window>

Вопрос: почему первое текстовое поле не зеленое ? ==> то есть дизайнер показывает его зеленым цветом, но при запуске приложения его уже нет ...

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

Спасибо!

Ответы [ 3 ]

2 голосов
/ 09 октября 2009

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

    <ResourceDictionary.MergedDictionaries>

        <ResourceDictionary Source="StylesDictionary.xaml"/>

    </ResourceDictionary.MergedDictionaries>

Единственное требование - чтобы ресурсы были заданы в другом словаре.

0 голосов
/ 09 октября 2009

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

TargetType="{x:Type TextBox}"
0 голосов
/ 09 октября 2009

Попробуйте это ...

<Style TargetType="{x:Type TextBox}">
...