Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы со StaticResource в XAML Silverlight, Иногда падает XamlParseException 
:(
    Опции темы
dzaraev
Дата 24.6.2013, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 149
Регистрация: 12.1.2013

Репутация: нет
Всего: 1



Доброго времени суток. Осваиваю Silverlight, столкнулся с такой проблемой: в некоторых случаях ссылки по именам или ключам из расширения {StaticResource} заканчиваются XamlParseException'ом. Причем, я не могу понять в чем именно проблема - в namescope''ах и словарях Сильвера или конкретных классах. 

Вот пример работающий на Silverlight 5 :
Код

<UserControl 
    x:Class="SilverlightApplication1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:System="clr-namespace:System;assembly=mscorlib"
    >
    <UserControl.Resources>
        <System:Double x:Key="_blockSize">
            17
        </System:Double>        
        <Storyboard x:Name="_myStoryboard">
            <DoubleAnimationUsingKeyFrames
                        Storyboard.TargetName="_blockMoving"
                        Storyboard.TargetProperty="X"
                        Duration="0:0:10"
                        >
                <!-- KeyTime properties are expressed as TimeSpan values. -->
                <LinearDoubleKeyFrame Value="100" KeyTime="0:0:3" />
                <LinearDoubleKeyFrame Value="200" KeyTime="0:0:8" />
                <LinearDoubleKeyFrame Value="500" KeyTime="0:0:9" />
                <LinearDoubleKeyFrame Value="600" KeyTime="0:0:10" />
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
    </UserControl.Resources>
    <Grid >
        <Canvas>
            <Path
                MouseLeftButtonDown="Mouse_Clicked"
                Fill="Blue"
                Stretch="Fill"
                >
                <Path.Data>
                    <EllipseGeometry 
                        RadiusX="{StaticResource _blockSize}" 
                        RadiusY="{StaticResource _blockSize}"
                        />
                </Path.Data>

                <Path.RenderTransform>
                    <TranslateTransform 
                        x:Name="_blockMoving" 
                        X="0" Y="0"
                        />
                </Path.RenderTransform>
            </Path>
        </Canvas>
    </Grid>
</UserControl>

Код

private void Mouse_Clicked(object sender, MouseButtonEventArgs e)
{
     _myStoryboard.Begin();
}


Теперь, допустим, я хочу вынести EllipseGeometry в ресурсы, то есть этот кусок:
Код

<Path
    MouseLeftButtonDown="Mouse_Clicked"
    Fill="Blue"
    Stretch="Fill"
    >
    <Path.Data>
        <EllipseGeometry 
            RadiusX="{StaticResource _blockSize}" 
            RadiusY="{StaticResource _blockSize}"
            />
    </Path.Data>
...
</Path                


переписываю так:
Код

...
<UserControl.Resources>
    <EllipseGeometry 
            x:Key="_pathData"
            RadiusX="{StaticResource _blockSize}" 
            RadiusY="{StaticResource _blockSize}"
            />
...
</UserControl.Resources>
...
<Path
    MouseLeftButtonDown="Mouse_Clicked"
    Fill="Blue"
    Stretch="Fill"
    Data="{StaticResource _pathData}"
    >                
...              
</Path>


Теперь во время загрузки xaml вылетает исключение:
Код

XamlParseException
Не удалось присвоить свойству "System.Windows.Shapes.Path.Data" [Line: 41 Position: 22]


Где строка 41 это:
Код

Data="{StaticResource _pathData}"


Я возвращаюсь к рабочему примеру и хочу теперь попробовать привязать старт анимации к моменту загрузки контрола. 
То есть добавить после </UserControl.Resources> следующий код:
Код

<UserControl.Triggers>
        <EventTrigger RoutedEvent="FrameworkElement.Loaded">
            <BeginStoryboard Storyboard="{StaticResource _myStoryboard}"/>
        </EventTrigger>
</UserControl.Triggers>

И снова исключение:
Код

XamlParseException
Не удалось присвоить свойству "System.Windows.Media.Animation.BeginStoryboard.Storyboard" [Line: 32 Position: 41]

где строка 32 это:
Код

<BeginStoryboard Storyboard="{StaticResource _myStoryboard}"/>


Если продолжать экспериментировать, то выяснится, что я вообще не могу привязать свойство Path.Data через {StaticResource}. По крайней мере на нашел, как. Где-то на Stack Overflow видел предположение, что для второй моей ошибки виноват может быть не StaticResource, а поиск объекта, указанного в Storyboard.TargetName (действительно - Storyboard.TargetNameProperty в Silverlight равен null во время инициализации UserControl,  в отличии от WPF), но ковыряние доков про namescope'ам ни к чему не привело.
Почитаю еще про систему словарей в Silverlight, ибо очень интересно, почему в SL необязательно задавать x:Key на ресурсы и можно задавать в StaticResource значения x:Name элементов.

Если же кто-то может что-либо подсказать или предположить, буду рад любой помощи.
--------------------
Если вопрос решён - помечайте тему.  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0707 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.