Silverlight 4 Эквивалент WPF "x: статический" - PullRequest
22 голосов
/ 30 июля 2010

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

А именно, когда я вставил некоторые старые xaml в новый проект, были некоторые ошибки, которыебыли выброшены относительно свойства «x: static» и «свойства Dynamic».

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

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

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

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

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

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

Ответы [ 2 ]

15 голосов
/ 30 июля 2010

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

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

2 голосов
/ 27 ноября 2011

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

Класс основного применения:

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 уже установлен или нет, не самый элегантный, но он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...