2010-07-30 5 views
21

Я работаю над проектом, который основан на старом проекте, который кто-то начал и не закончил. Я пытался использовать как можно больше своего кода, поэтому при этом я столкнулся с некоторыми проблемами настройки.Silverlight 4 Эквивалент WPF «x: static»

А именно, когда я поместил часть старого 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. Но я просто не могу найти исправления для этого в любом месте, поэтому я не знал, есть ли только библиотека, которую я отсутствовал, или просто то, что я просто пропускаю или что.

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

ответ

15

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

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

+1

Я полностью согласен с тем, что нелегко перенести проект WPF в Silverlight. Но я сделаю это. Спасибо огромное! – AmbiguousX

+0

Добро пожаловать) – n535

+0

«Mimicking DynamicResource в Silverlight 3» ссылка мертва. –

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 подход проверки, был Binding уже установлен или нет, не самый изящный, но он работает.

Смежные вопросы