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

「if」のコードなしで foreach コードのみを実行すると、機能します。また、foreach を使用せずに「if」でのみコードを実行すると、それも機能します。しかし、一緒に (「if」コードと foreach コード) は機能しません。

なぜうまくいかないのかわかりません。2 つのテンプレートは次のようになります。

<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です。「選択済み」と「未選択」の 2 つの状態を作成し、未選択状態を空のままにして、「選択済み」状態に「#FF999999」色を割り当てForegroundます。

これで、コードで行う必要があるのは次のとおりです。

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

また

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

適切な項目について。

于 2010-06-09T09:34:41.853 に答える