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