在CodeBehind中设置ContentTemplate:XamlParseException 2260错误

时间:2010-06-09 08:51:38

标签: .net silverlight silverlight-4.0 xamlparseexception

我想在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>

如果你知道什么问题请告诉我。

1 个答案:

答案 0 :(得分:0)

我无法解释为什么你的代码不起作用,但却是实现这一目标的可怕方法。

最好使用VisualStateManager处理此类任务。创建两个状态“已选择”和“未选定”,将未选择状态保留为空并使“已选定”状态将“#FF999999”颜色指定为Foreground

现在您需要做的所有代码都是: -

VisualStateManager.GotoState(item, "Selected", false);

VisualStateManager.GotoState(item, "Unselected", false);

关于适当的项目。