WPF: свойство привязки полей / толщины слева и сверху - PullRequest
0 голосов
/ 17 ноября 2018

У меня проблема с привязками (я знаю, почему я становлюсь этим исключением, но не знаю, как решить проблему).

Я пробовал этот кусок кода.

  <TextBlock HorizontalAlignment="Left" >
                        <TextBlock.Margin>
                            <Thickness Left="{Binding POSX.Value, Converter={StaticResource DPIConverter}}"
                                       Top="{Binding POSY.Value, Converter={StaticResource DPIConverter}}"/>
                        </TextBlock.Margin>
                    </TextBlock>

Я получаю исключение, в котором говорится, что вы не можете связать свойства толщины [LEFT], [TOP]. (почему: эти свойства не являются зависимыми свойствами)

Спасибо за вашу помощь.

Редактировать: В случае, если вы не поняли, что я пытаюсь достичь

-> Я хочу связать левый и верхний свойства поля <- </p>

1 Ответ

0 голосов
/ 17 ноября 2018

Правильно, вы не можете связать Левый, Верхний, Правый или Нижний, потому что они не являются свойством зависимости.Они являются собственностью CLR.DependencyProperty является оболочкой для свойства CLR.

Класс, который определяет свойство зависимости, должен быть унаследован от класса DependencyObject.Толщина - это класс, который не унаследован от класса DependencyObject.Но Margin принадлежит TextBlock, который наследуется от FrameworkElement, а FrameworkElement наследуется от UIElement, а UIElement наследуется от Visual, который наследуется от класса DependencyObject.

То, что вы можете связать, это Margin, поскольку Margin является свойством зависимостизарегистрирован в FrameworkElement Class.

Вы можете изменить свой Xaml следующим образом (пример кода)

<TextBlock HorizontalAlignment="Left" Margin="{Binding POS, Converter={StaticResource DPIConverter}}" >

Ниже приведен код конвертера, куда мы можем отправить всю толщину

 public class DPIConverter : IValueConverter
{
    public object Convert(object value, System.Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    {    // your code inside Ivalue 
         // based pn some value send left and right value. other's can zero 
         // or which ever value you need. 
          int x = POS.PosX.Value;
          int y = POS.PoxY.Value;

        return new Thickness(System.Convert.ToDouble(x), System.Convert.ToDouble(y), 0, 0);
    }

    public object ConvertBack(object value, System.Type targetType,
        object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}
...