读书人

WPF自定义的控件动态引用资源为啥

发布时间: 2013-12-11 16:44:13 作者: rapoo

WPF,自定义的控件,动态引用资源为什么不见效
一个自定义的控件CustomControl1:


<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WPF3">
<Style x:Key="aa" TargetType="Border">
<Setter Property="Background" Value="Red"/>
</Style>
<Style TargetType="{x:Type local:CustomControl1}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl1}">
<Border Style="{DynamicResource aa}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>


public class CustomControl1 : Control
{
static CustomControl1()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));
}
}


在CustomControl1的样式中,Border元素引用了一个Style资源"aa",引用方式为动态引用。但结果并不见效,改为静态引用(StaticResource)之后,才能见到效果。
请问,这是什么原因呢?难道动态引用还没有静态引用凑效吗?
[解决办法]
没有这么用过,建议你google一下“依赖属性”

DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomControl1), new FrameworkPropertyMetadata(typeof(CustomControl1)));不清楚你这句话是不是修改了默认的样式,或者需要处理相应的ProperyChange的相关内容
[解决办法]
将模版与样式分开写!
[解决办法]
引用:
Quote: 引用:

将模版与样式分开写!

与这一个控件相关的,我都是写在一堆的。东放点,西放点,更不好。
我就是不明白为什么,动态引用不行呢?静态引用为什么又可以呢?

请确认动态引用完成后,有没有相应的处理,即通知相关属性已经发生变化

读书人网 >C#

热点推荐