1

我想更改 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;
}

如果我只做 foreach 代码而没有“if”中的代码,它就可以工作。如果我只在没有 foreach 的情况下在“if”中编写代码,它也可以工作。但是一起(“if”代码和 foreach 代码)它不起作用。

我不知道为什么它不起作用。这两个模板如下所示:

<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>

如果您知道是什么问题,请告诉我。

4

1 回答 1

0

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

这种任务最好用VisualStateManager. 创建两个状态“已选择”和“未选择”,将未选择状态留空并让“已选择”状态将“#FF999999”颜色分配给Foreground

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

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

或者

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

在相应的项目上。

于 2010-06-09T09:34:41.853 回答