В UWP, что эквивалентно свойству DependencyType класса DependencyProperty WPF? - PullRequest
0 голосов
/ 31 марта 2019

После переноса библиотеки классов WPF в библиотеку классов UWP следующий код выдает ошибку.Свойство PropertyType класса DependencyProperty работает в WPF.Я попытался получить справку из Обзора свойств зависимостей из аналогичного класса в UWP и этой онлайн-статьи, но немного запутался.

Что ямне не хватает здесь и как я могу заставить его работать?

Фрагмент кода [ошибка возникает в первой строке метода]:

using Windows.UI.Xaml;
using System.Reflection;
using Windows.UI.Xaml.Documents;
using System.ComponentModel;
....

private static void SetPropertyValue(XmlElement xamlElement, DependencyProperty property, string stringValue)
{
    TypeConverter typeConverter TypeDescriptor.GetConverter(property.PropertyType);
    try
    {
        object convertedValue = typeConverter.ConvertFromInvariantString(stringValue);

        if (convertedValue != null)
        {
            xamlElement.SetAttribute(property.Name, stringValue);
        }
    }
    catch(Exception)
    {
    }
}

Ошибка :

«DependencyProperty» не содержит определения для «PropertyType», и нет доступного метода расширения «PropertyType», принимающего первый аргумент типа «DependencyProperty» (вы пропустили директиву using или ссылку на сборку?)

Снимок "ВСЕХ" установленных пакетов:

enter image description here

1 Ответ

0 голосов
/ 31 марта 2019

Ниже приведен простой пример того, как вы можете использовать DependencyProperty в UWP.

XAML

<Page x:Name="loginPage"
... >

<TextBlock Text="{Binding welcomeText,ElementName=loginPage}"></TextBlock>

C #

using Windows.UI.Xaml;
...
public string welcomeText
{
     get { return (string)GetValue(welcomeTextProperty); }
     set { SetValue(welcomeTextProperty, value); }
}

// Using a DependencyProperty as the backing store for welcomeText.  This enables animation, styling, binding, etc...
public static readonly DependencyProperty welcomeTextProperty =
        DependencyProperty.Register("welcomeText", typeof(string), typeof(LoginPage), null);

В приведенном выше примере мы связываем зависимостьсвойство welcomeText, которое мы определяем в коде (C #) для TextBlock.

Обратите внимание, ElementName=loginPage - это имя страницы, которое мы определяем в XAML.

Надеюсь, это поможет.


РЕДАКТИРОВАТЬ 1:

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

Для этого требования вы можете сделать что-то вроде этого:

В следующем примере у нас есть специальный преобразователь значений, который преобразует длину строки в Visibility, другими словами, возвращает Visibility на основе длины строки, которую он получает для преобразования, а также проверяет, относится ли тип value к типу string.

XAML

<Page x:Name="loginPage"
 xmlns:converters="using:projectName.converters"
... >
<Page.Resources>
    <converters:LengthToVisibilityConverter x:Key="lengthToVisibilityKey"></converters:LengthToVisibilityConverter>
</Page.Resources>
...
<TextBlock x:Name="flyoutTxt" Text="{Binding welcomeText,ElementName=loginPage}"></TextBlock>
<TextBlock Text="Has some text" Visibility="{Binding Path=Text,ElementName=flyoutTxt,Converter={StaticResource lengthToVisibilityKey}}"></TextBlock>

Здесь видимость второго TextBlock основана на длине текста flyoutTxt.

C #

Пользовательский класс преобразователя для преобразования длиныto Visibility:

class LengthToVisibilityConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {   //checking if type of "value" is String and its length
        if(value != null && value.GetType() == typeof(string) && 
           value.ToString().Length > 0)
        {
            return Visibility.Visible;
        }
        else
        {
            return Visibility.Collapsed;
        }

    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {
        throw new NotImplementedException();
    }
}

Обратите внимание, что в зависимости свойства, определенной выше, не требуется никаких изменений.

...