WP7 Uri как StaticResource?

Я хочу определить URI в файлах ресурсов и использовать их в ApplicationBar. Я сделал это как первый ответ на следующий вопрос:

WP7 Image Uri как StaticResource

нравится:

    <ResourceDictionary
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=System">

        <sys:Uri x:Key="MenuButton1">/Images/button1.png</sys:Uri>
        <sys:Uri x:Key="MenuButton2">/Images/button2.png</sys:Uri>
    </ResourceDictionary>

Но у меня это не работает, файл xaml не поддается синтаксическому анализу.

А затем я нашел другое решение, расширяющее класс StaticResourceExtension, см. Последний ответ на следующий вопрос:

Возможно ли предоставить преобразователь типов для статического ресурса в WPF?

нравится:

public class MyStaticResourceExtension : StaticResourceExtension
{
    public IValueConverter Converter { get; set; }
    public object ConverterParameter { get; set; }

    public MyStaticResourceExtension()
    {
    }

    public MyStaticResourceExtension(object resourceKey)
        : base(resourceKey)
    {
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        object value = base.ProvideValue(serviceProvider);
        if (Converter != null)
        {
            Type targetType = typeof(object);
            IProvideValueTarget target = serviceProvider.GetService(typeof(IProvideValueTarget)) as IProvideValueTarget;
            if (target != null)
            {
                DependencyProperty dp = target.TargetProperty as DependencyProperty;
                if (dp != null)
                {
                    targetType = dp.PropertyType;
                }
                else
                {
                    PropertyInfo pi = target.TargetProperty as PropertyInfo;
                    if (pi != null)
                    {
                        targetType = pi.PropertyType;
                    }
                }
            }
            value = Converter.Convert(value, targetType, ConverterParameter, CultureInfo.CurrentCulture);
        }
        return value;
    }
}

Но я не знаю, можно ли его использовать на Windows Phone 7 и как его реализовать, может кто-нибудь дать мне несколько советов или примеров? или помогите мне исправить первое решение. заранее спасибо.


person purezhi    schedule 10.12.2011    source источник


Ответы (2)


Вы не хотите делать это в XAML, поскольку ApplicationBar не поддерживает привязку данных.

Вместо этого вы должны создать ApplicationBar с помощью C #, который также предлагает вам возможность выполнять локализацию.

Что касается определения URL-адресов, я рекомендую вам использовать файл ресурсов .NET или определить статический класс с URL-адресами навигации. Единственная причина для определения URL-адреса в качестве ресурса в первую очередь заключается в том, что вы намереваетесь повторно использовать его, и поэтому вам, вероятно, также потребуется доступ к нему из C #, поэтому файл ресурсов будет оптимальное решение.

Вот пример того, как построить ApplicationBar в C #. Он также позволяет добавлять дополнительные функции, например переключение прозрачности.

person Claus Jørgensen    schedule 11.12.2011
comment
Спасибо за Ваш ответ. На самом деле я разобрался с проблемой локализации. Сначала определите строку в файле xaml, например: <core:String x:Key="App...Text">refresh</core:String>, затем импортируйте файл в App.xaml и используйте его как: <shell:ApplicationBarIconButton x:Name="AppBarRefreshButton" Click="AppBarRefreshButton_Click" IconUri="/Themes/.../refresh.png" Text="{StaticResource App...Text}"/> И это работает. Я хочу сделать то же самое со свойством IconUri, но определенная строка в файле xaml не может использоваться для свойства, и я не знаю, как определить Uri в файле xaml. Итак, это мой вопрос. - person purezhi; 12.12.2011
comment
Используйте <core:Uri>, но снова, это плохая идея. - person Claus Jørgensen; 12.12.2011

использование таблички с данными может помочь решить вашу проблему.

person ellic    schedule 11.12.2011