Установить ContentTemplate в CodeBehind: ошибка XamlParseException 2260
Я хотел бы изменить 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 без кода в "если", это работает. И если я только делаю код в "если" без 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 ответ
Я не могу объяснить, почему ваш код не работает, но это ужасный способ достижения этой цели.
Такого рода задачи лучше всего решать с помощью VisualStateManager
, Создайте два состояния "Выбрано" и "Не выбрано", оставьте состояние "Не выбрано" пустым, а в состоянии "Выбрано" назначьте цвет "#FF999999" для Foreground
,
Теперь все, что нужно сделать вашему коду:
VisualStateManager.GotoState(item, "Selected", false);
или же
VisualStateManager.GotoState(item, "Unselected", false);
на соответствующие предметы.