Silverlight默认ContentPresenter内容

Silverlight默认ContentPresenter内容,第1张

概述为什么这不起作用? 在generic.xaml中,用于自定义控件: 在应用于自定义控件的样式中… <Setter Property="ChromeContent"> <Setter.Value> <Grid /> </Setter.Value></Setter> … 后来,在控件模板中…… <ContentPresenter Grid.Column="0" x:Nam 为什么这不起作用?

在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内容所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1005453.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存