
在generic.xaml中,用于自定义控件:
在应用于自定义控件的样式中…
<Setter Property="ChromeContent"> <Setter.Value> <GrID /> </Setter.Value></Setter>
…
后来,在控件模板中……
<ContentPresenter GrID.Column="0" x:name="ChromeContentPresenter" Content="{TemplateBinding ChromeContent}" /> 这是ChromeContent的依赖属性…
public Object ChromeContent{ get { return (Object)GetValue(Chromecontentproperty); } set { SetValue(Chromecontentproperty,value); }}public static Readonly DependencyProperty Chromecontentproperty = DependencyProperty.Register("ChromeContent",typeof(Object),typeof(casPopup),null); 如您所见,它需要任何对象.我尝试将其更改为网格,但这没有帮助.
它抛出此错误(来自JavaScript):_无法分配给属性’System.windows.Controls.ContentPresenter.Content’
奇怪的是,如果我从setter中删除网格并使用文本,以下内容将正常工作:
<Setter Property="ChromeContent" Value="DEFAulT" />
此外,这也适用于控件类中的OnApplyTemplate方法:
GrID g = new GrID(); g.WIDth = 100; g.Height = 25; g.Background = new SolIDcolorBrush(colors.lightGray); ChromeContent = g;
我很难理解什么阻止了网格的默认内容,在generic.xaml中定义了.有没有人对此事有任何了解?
非常感谢您的帮助!
解决方法 这就是问题:-<Setter Property="ChromeContent"> <Setter.Value> <GrID /> </Setter.Value></Setter>
您不应将UIElement直接包含在资源字典中或作为样式的值.您可能会将样式视为某种描述符,但事实并非如此.样式中的值是它们所持有的对象的构造实例.您的样式包含GrID的单个实例.每当使用该样式分配给ChromeContent属性时,它将尝试协助GrID的同一单个实例.
UIElement只能是父母一方的孩子.如果您的控件构建了两个实例,会发生什么?将(如果silverlight允许)尝试将GrID的同一单个实例分配给两个控件.
这是ControlTemplate和DataTemplate等模板的一个原因.每次使用模板时都会调用这些标记,而不是在首次解析Xaml时调用.
编辑:
要回答您的补充问题,您应该默认DataTemplate类型的另一个属性: –
<Setter Property="ChromeContentTemplate"> <Setter.Value> <DataTemplate> <GrID /> </DataTemplate> </Setter.Value></Setter>
属性:-
public Object ChromeContentTemplate{ get { return (DataTemplate)GetValue(ChromeContentTemplateProperty); } set { SetValue(ChromeContentTemplateProperty,value); }}public static Readonly DependencyProperty ChromeContentTemplateProperty= DependencyProperty.Register("ChromeContentTemplate",typeof(DataTemplate),null); 控制模板: –
<ContentPresenter GrID.Column="0" x:name="ChromeContentPresenter" Content="{TemplateBinding ChromeContent}" ContentTemplate="{TemplateBinding ChromeContentTemplate" /> 总结 以上是内存溢出为你收集整理的Silverlight默认ContentPresenter内容全部内容,希望文章能够帮你解决Silverlight默认ContentPresenter内容所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)