none
WPF给TargetType类型的控件添加样式的一个疑问。 RRS feed

  • 问题

  • 场景一: 当我要给一个WPF 中的Window中的所有Button添加一个样式,代码如下:

             <Style TargetType="Button">
                <Setter Property="Background" Value="Black"></Setter>
            </Style>

    这个没有什么疑问,大家都会这么做。

     

    场景二: 当我不使用声明的方式,而是用C#代码添加样式的时候:代码如下

                Style style = new Style();
                style.TargetType = typeof(Button);
                style.Setters.Add(new Setter(Button.BackgroundProperty, new SolidColorBrush(Colors.Black)));
                this.Resources.Add(typeof(Button), style);

    这样当然也是正确的。

    提问:this.Resources.Add(typeof(Button), style);  这句话有点想不通。

    一个Dictionary的Key是用作标识用的,用以通过Key跟Value关联起来。

    那么这里的Key是一个类型。拿到是经过C#编译器编译之后,对这个行为进行特殊处理了吗?

    使得所有应用范围(即Window)内的Button都按照这个设置样式。编译器在背后做了很多额外的工作吗?

    如果按照Dictionary的常理来讲,似乎不太讲的通,希望高手们指教,详解。谢谢。

    2010年10月15日 9:00

全部回复