WPF из DynamicResource в StaticResource - PullRequest
0 голосов
/ 01 апреля 2011

Я некоторое время работал над проектом WPF, но не трогал его уже 2 месяца.Теперь, когда я вернулся, у меня возникла следующая проблема:

Я использую объединенные словари для создания скинов и легко меняю их во время выполнения.Тем не менее, каждый скин не меняется во время выполнения.Но в то время как я был нубистским в этом, я только следовал за кучей обучающих программ, и я везде использовал DynamicResource, даже не задаваясь вопросом, следует ли мне использовать StaticResource.

В результате, когда я пытался отправить свое приложение вДруг, использующий Windows XP (я использую семь).Тема Luna выбрасывается поверх моего приложения, делая дизайн уродливым ... И насколько я понял, он исходит от DynamicResource.

Итак, теперь я хочу перейти на StaticResource, я просто попытался заменить все "DynamicResource "с помощью" StaticResource ".И это вызывает у меня следующее исключение:

Message = "'La valeur fournie sur 'System.Windows.StaticResourceExtension' a levé une exception.' numéro de ligne '8' et position de ligne '230'."

In english, it means: Message = "'The value given to 'System.Windows.StaticResourceExtension' threw an exception.' line number '8' and position on the line '230'.

Затем я помещаю блок try / catch, чтобы лучше понять проблему:

{"Impossible de trouver la ressource nommée'styleBackground'. Les noms de ressources respectent la casse."}

На английском языке: Impossible to find the resource named 'styleBackground'. The resource names are case sensitive.

Речь идет о TabItem.

Итак, два вопроса: правильно ли я поступаю, меняя DynamicResource на StaticResource?И если да, что мне нужно сделать?

Спасибо,

FB.

EDIT: программа получает ошибку в последней из следующих строк:

<Window x:Class="Sc2ReplayMonkey.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
        xmlns:local="clr-namespace:Sc2ReplayMonkey" ResizeMode="CanResize"
        Title="Starcraft II Replay Monkey"
        Width="991" Icon="Resources\Icons\SC2_Replay_Monkey.png"
        WindowStartupLocation="CenterScreen" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DesignHeight="1024" Height="774" Visibility="Visible" Foreground="#00000000" Margin="0">

Ответы [ 2 ]

0 голосов
/ 27 августа 2011

Решение состояло в том, чтобы загрузить все ресурсы ресурсов при запуске, а не запускать без обложки (которая работает с динамическим ресурсом) и позволить пользователю выбрать обложку во время выполнения.

0 голосов
/ 01 апреля 2011

Что вы думаете о том, что проблемы возникают из DynamicResource?

Насколько я знаю, DynamiResource, в отличие от StaticResource, просто используется для получения ресурса во время выполнения, а не во время компиляции.DynamicResource полезен в тех случаях, когда вам необходимо сослаться на ресурс до его объявления (что вызовет ошибку компиляции, если вы использовали StaticResource).

<ResourceDictionary><DataTemplate>... <Rectangle Fill={DynamicResource MyBrush}></Rectangle>  ...</DataTemplate> <SolidColorBrush x:Key="MyBrush"></SolidColorBrush> <ResourceDictionary>

В этом случае использование StaticResource вместо DynamicResource вызоветошибка компиляции.

Теперь о вашей проблеме: если вы не назначите стили явно для ваших элементов управления, WPF выберет стиль по умолчанию из текущей темы ОС, в вашем случае это тема XP.Чтобы решить эту проблему, вы можете выбрать тему Win 7 и вставить ее в свое приложение.

Это добавляет много работы для вас, но это единственный способ переопределить все стили элементов управления так, чтобы они сохраняли эти стили независимо от операционной системы, в которой они выполняются.

HTH

Риана

...