我想在CodeBehind文件中更改ContentPresenter的ContentTemplate。 但是,如果我运行Silverlight 4应用程序,则会发生错误代码为2260的XamlParseException。
foreach (ContentPresenter item in Headers)
{
item.ContentTemplate = Parent.UnselectedHeaderTemplate;
}
if ((index >= 0) && (index < Headers.Count))
{
ContentPresenter item0 = (ContentPresenter)Headers[index];
item0.ContentTemplate = Parent.SelectedHeaderTemplate;
}
如果我只使用没有“if”中的代码的foreach代码,它就可以了。如果我只在没有foreach的情况下执行“if”中的代码,它也会起作用。但是togheter(“if”-code和foreach-code)它不起作用。
我不知道它为什么不起作用。 这两个模板看起来像这样:
<Setter Property="UnselectedHeaderTemplate">
<Setter.Value>
<DataTemplate>
<ContentControl Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}"
Margin="10,-10"
FontSize="72"
Foreground="#FF999999"
CacheMode="BitmapCache"/>
</DataTemplate>
</Setter.Value>
</Setter>
<!-- SelectedHeader template -->
<Setter Property="SelectedHeaderTemplate">
<Setter.Value>
<DataTemplate>
<ContentControl Content="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content}"
Margin="10,-10"
FontSize="72"
Foreground="{TemplateBinding Foreground}"
CacheMode="BitmapCache"/>
</DataTemplate>
</Setter.Value>
</Setter>
如果你知道什么问题请告诉我。
答案 0 :(得分:0)
我无法解释为什么你的代码不起作用,但却是实现这一目标的可怕方法。
最好使用VisualStateManager
处理此类任务。创建两个状态“已选择”和“未选定”,将未选择状态保留为空并使“已选定”状态将“#FF999999”颜色指定为Foreground
。
现在您需要做的所有代码都是: -
VisualStateManager.GotoState(item, "Selected", false);
或
VisualStateManager.GotoState(item, "Unselected", false);
关于适当的项目。