wpf中的奇怪风格行为?

时间:2009-10-09 13:40:58

标签: wpf styles mergeddictionaries

好吧,我编写了一个应用程序,它在运行时加载了合并的字典,以便在我遇到困难时改变外观和行为:我的表单上的一些控件只是没有对我认为他们必须做出反应的样式做出反应。

我试图尽可能地简化这个问题并想出一些如此简单的东西,我担心我会忽视明显的流血,但无论如何它都在这里:

<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>

问题是:为什么第一个文本框不是绿色? ==&GT;也就是说,设计师以绿色显示它,但在运行应用程序时,它不再是......

我知道解决这个特殊问题的方法是删除合并的dicitonary标签,但我需要知道如何使用合并的字典来解决这个问题。

谢谢!

3 个答案:

答案 0 :(得分:2)

MergedDictionaries一直很古怪,您可以在其中设置所需的任何资源,但在运行时处理外部资源字典引用。

    <ResourceDictionary.MergedDictionaries>

        <ResourceDictionary Source="StylesDictionary.xaml"/>

    </ResourceDictionary.MergedDictionaries>

唯一的要求是在其他字典中设置资源。

答案 1 :(得分:0)

试试这个......

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

答案 2 :(得分:0)

我不确定这是否有效,但当我遇到样式问题时,我使用

修复了它们
TargetType="{x:Type TextBox}"