Подтвердить что ты не робот

Silverlight 4 Эквивалент WPF "x: статический"

Я работаю над проектом, который основан на старом проекте, который кто-то начал и не закончил. Я пытался использовать как можно больше своего кода, поэтому при этом я сталкивался с некоторыми проблемами настройки.

А именно, когда я поместил часть старого xaml в новый проект, были обнаружены некоторые ошибки, связанные с "x: static" и "Динамическое свойство".

вот сами сообщения об ошибках:

Ошибка 1: тип DynamicResource не был найденный. Убедитесь, что вы не пропустите ссылку на сборку и что все собраны ссылочные сборки.

Ошибка 2: Тип "x: Статический" не найден. Убедитесь, что вы не сборка и что все собраны ссылочные сборки.

Некоторые заметные моменты, которые, по моему мнению, вызывают ошибки: старый проект был запрограммирован в VS2008, WPF, v3.5.Net framework; тогда как я программирую в VS2010, Silverlight 4,.Net framework v4.0.

Я понимаю, что есть различия между WPF и Silverlight по мере того, как идет xaml, и есть много отличий от разных версий и версий Visual Studio Visual Studio. Но я просто не могу найти исправления для этого в любом месте, поэтому я не знал, была ли только библиотека, которую я отсутствовал, или просто то, что я просто пропускаю или что.

Я могу воссоздать это, если нужно, но, как я уже сказал, я предпочел бы использовать как можно больше старого кода, если только настройка не вызовет больше проблем, чем того, что стоит.

4b9b3361

Ответ 1

К сожалению, вы не можете напрямую использовать ключевые слова DynamicResource и Статические в подмножестве Silverlight XAML, но вы можете имитировать их поведение. Вот статья по теме:

В общем, нет простого способа переноса проекта из WPF в Silverlight. У них очень много общего, но, строго говоря, это разные технологии.

Ответ 2

Другой способ добиться привязки к статическим свойствам - связать в коде. Ниже приведен пример.

Основной класс приложения:

public partial class App : Application
{
    public static MyViewModel MyViewModel { get; private set; }

    // ...
}

Разметка главного окна:

<TextBlock Loaded="MyTextBlockLoaded" />

Обратный код главного окна:

public partial class MainPage : PhoneApplicationPage
{
    // ...

    private void MyTextBlockLoaded(object sender, RoutedEventArgs e)
    {
        TextBlock textBlock = ((TextBlock)sender);
        if (textBlock.Tag == null)
        {
            textBlock.Tag = true;
            Binding bind = new Binding("MyInfo");
            bind.Source = App.MyViewModel;
            bind.Mode = BindingMode.OneWay;
            textBlock.SetBinding(TextBlock.TextProperty, bind);
        }
    }
}

Возможно, подход проверки TextBlock.Tag, был привязан уже установленным или нет, не самый изящный, но он работает.