Установить ContentTemplate в CodeBehind: ошибка XamlParseException 2260 - PullRequest
1 голос
/ 09 июня 2010

Я хотел бы изменить ContentTemplate ContentPresenter в файле CodeBehind.Но если я запускаю приложение Silverlight 4, возникает исключение XamlParseException с кодом ошибки 2260.

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 и код 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>

Если у вас есть идея, в чем проблема, скажите, пожалуйста.

1 Ответ

0 голосов
/ 09 июня 2010

Я не могу объяснить, почему ваш код не работает, но это ужасный способ достижения этой цели.

Задача такого рода лучше всего обрабатывается с помощью VisualStateManager. Создайте два состояния «Выбрано» и «Не выбрано», оставьте состояние «Не выбрано» пустым, а в состоянии «Выбрано» назначьте цвет «# FF999999» для Foreground.

Теперь все, что нужно вашему коду, это: -

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

или

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

на соответствующие предметы.

...