Темы набора инструментов Silverlight: исключение при настройке темы с помощью TreeView - PullRequest
1 голос
/ 31 августа 2011

Я столкнулся с проблемой, пытаясь программно применить тему 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 г.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2011

Ну, похоже, это ошибка из SL SL toolkit. Я получаю эту ошибку, если установить тему при расширении дерева:

System.Windows.Markup.XamlParseException: не удалось назначить свойство 'System.Windows.Controls.ContentControl.Content'.

В любом случае, обычный способ использования тем работает безупречно:

<theme:TwilightBlueTheme>
    ...
</theme:TwilightBlueTheme>

Это определение пространства имен темы:

xmlns:theme="clr-namespace:System.Windows.Controls.Theming;assembly=System.Windows.Controls.Theming.TwilightBlue"
0 голосов
/ 31 августа 2011

Посмотрите на этот пост о том, как динамически менять тему с помощью Silverlight Toolkit

...