Как правильно ссылаться на пользовательский DependencyProperty из UserControl XAML? - PullRequest
0 голосов
/ 06 июня 2019

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

Прежде всего, у меня есть UserControl, который определяет тег ресурсов. Я устанавливаю стиль в этом теге, который предназначен для применения к моему производному UserControl (StackEntry). Я использую DataTrigger, чтобы условно установить DependencyProperty для этого пользовательского элемента управления на определенное значение.

Интересно, что, несмотря на то, что Visual Studio говорит мне, что у меня есть две ошибки, я в состоянии построить решение просто отлично. Он даже работает точно так, как и ожидалось - DependencyProperty устанавливается триггером. Тем не менее, я все еще хочу выяснить, что вызывает это, чтобы я мог вернуть окно дизайна. В настоящее время отображается сообщение «Неверная разметка».

Я пробовал:

  1. Использование разных свойств. Пользовательские свойства никогда не работают, но те, которые определены в UserControl, работают.

  2. Установка триггера в отдельный файл (ресурс).

  3. Перезапуск Visual Studio. Это приводит к тому, что «ошибка» временно устраняется, пока она не появится с, казалось бы, произвольным интервалом.

  4. Перестройка проекта.

  5. Запуск проекта.

Вот соответствующий XAML:

<UserControl.Resources>
    <Style TargetType="{x:Type con:StackEntry}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding ElementName=Control, Path=Element.EntityConditionState.IsEmpty}" Value="True">
                <Setter Property="ConditionRowHeight" Value="0"/> <!-- this is the line throwing the "error". -->
            </DataTrigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>

Свойство DependencyProperty, на которое я ссылаюсь:

public GridLength ConditionRowHeight
{
    get => (GridLength)GetValue(ConditionRowHeightProperty);
    set => SetValue(ConditionRowHeightProperty, value);
}
public static readonly DependencyProperty ConditionRowHeightProperty =
    DependencyProperty.Register("ConditionRowHeight", typeof(GridLength),
    typeof(StackEntry), new PropertyMetadata(new GridLength(0.8, GridUnitType.Star)));

Поскольку класс StackElement определяет DP ConditionRowHeight, установка TargetType тега Style должна позволять любым тегам Setter использовать его. Однако я получаю следующую ошибку:

Свойство ConditionRowHeight не является свойством DependencyProperty. Для использования в разметке несвязанные свойства должны быть представлены для целевого типа с помощью доступного свойства экземпляра «ConditionRowHeight». Для прикрепленных свойств объявляющий тип должен предоставлять статические методы «GetConditionRowHeight» и «SetConditionRowHeight».

Также, как указано выше, в окне дисплея XAML отображается сообщение «Неверная разметка».

Я использую Visual Studio Community 2019, если это поможет.

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