Я столкнулся с проблемой, пытаясь программно применить тему Silverlight Toolkit. При задании темы при определенных условиях возникает исключение.
XAML:
<StackPanel>
<Button HorizontalAlignment="Left"
Content="Press To Set Theme"
Click="Button_Click" />
<sdk:TreeView>
<sdk:TreeViewItem Header="Items">
<TextBlock Text="Item" />
</sdk:TreeViewItem>
</sdk:TreeView>
</StackPanel>
Код сзади:
private void Button_Click(object sender, RoutedEventArgs e)
{
TwilightBlueTheme.SetIsApplicationTheme(Application.Current, true);
}
Если я запускаю его, затем расширяю TreeView и затем нажимаю кнопку, я получаю это:
System.ArgumentException: Value does not fall within the expected range.
at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
EDIT:
Я сейчас попробовал другой способ сделать это, и он все еще ломается с той же ошибкой. Я завернул xaml в тему, например:
<toolkit:Theme x:Name="ThemeContainer"
ThemeUri="/System.Windows.Controls.Theming.TwilightBlue;component/Theme.xaml">
...
</toolkit:Theme>
А затем изменил переключение тем на:
Theme themeContainer = (Theme)((FrameworkElement)Application.Current.RootVisual).FindName("ThemeContainer");
themeContainer.ThemeUri = new Uri("/System.Windows.Controls.Theming.ExpressionDark;component/Theme.xaml"), UriKind.RelativeOrAbsolute);
Та же самая ситуация: это работает, за исключением того, что если я уже расширил TreeView, он ломается с той же ошибкой.
SL4 с апреля 2010 г.