Свойство ошибки привязки не найдено для объекта - PullRequest
0 голосов
/ 08 июня 2018

Я застрял со сломанной привязкой, обычно этот подход работает нормально, но теперь я не могу заставить его работать.Это действительно просто, у меня есть пользовательский контроль с эллипсом, этот эллипс должен менять цвет в зависимости от свойства DependencyProperty типа boolean.Однако кажется, что он не находит DependencyProperty.Поиск в течение нескольких часов перепробовал многое другое, но не может заставить его работать.Я думаю это потому что сегодня пятница?

XAML:

<UserControl
    x:Class="NTP_Status"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    d:DesignHeight="100"
    d:DesignWidth="100"
    mc:Ignorable="d">
    <Ellipse
        Width="100"
        Height="100"
        StrokeThickness="2">
        <Ellipse.Style>
            <Style TargetType="{x:Type Ellipse}">
                <Setter Property="Fill" Value="Red" />
                <Setter Property="Stroke" Value="Black" />
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="Fill" Value="Orange" />
                        <Setter Property="Stroke" Value="Navy" />
                    </Trigger>
                    <DataTrigger Binding="{Binding Path=IsSyncing, RelativeSource={RelativeSource Self}}" Value="True">
                        <Setter Property="Fill" Value="Green" />
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Path=IsSyncing, RelativeSource={RelativeSource Self}}" Value="False">
                        <Setter Property="Fill" Value="DarkGreen" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Ellipse.Style>
    </Ellipse>
</UserControl>

VB.net:

Public Class NTP_Status

    Private Shared ReadOnly IsSyncingProperty As DependencyProperty = DependencyProperty.Register("IsSyncing", GetType(Boolean), GetType(NTP_Status))

    Public Property IsSyncing As Boolean
        Get
            Return CBool(Me.GetValue(IsSyncingProperty))
        End Get

        Set(ByVal value As Boolean)
            Me.SetValue(IsSyncingProperty, value)
        End Set
    End Property
End Class

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Если вы используете {RelativeSource Self} на вашем Ellipse, у вас должно быть это свойство IsSyncing на элементе управления Ellipse.

Что, конечно, не так, и я думаю, что вы должны использовать Path = DataContext .IsSyncing, если экземпляр NTP_Status является вашим DataContext.

Лучше избавиться от этого родственникаисходить и оставить путь привязки, как сейчас.

Редактировать:

Я вижу, что я был отклонен и я не понимаю, почему, может быть, тот, кто сделалэто может объяснить.

Просто обратите внимание, что ваш Ellipse унаследует DataContext от его родителя (в данном случае UserControl), поэтому вам не нужно использовать привязки RelativeSource там.

0 голосов
/ 08 июня 2018

у вас есть стиль для эллипса.Привязка с {RelativeSource Self} означает, что Binding попытается найти свойство IsSyncing в объекте Ellipse, который завершается ошибкой, поскольку IsSyncing объявлен в UserControl.

use RelativeSource AncestorType

Binding="{Binding Path=IsSyncing, RelativeSource={RelativeSource AncestorType=UserControl}}"

или дайте UserControl имя (x:Name="myControl") и используйте ElementName:

Binding="{Binding Path=IsSyncing, ElementName=myControl}"

также Trigger Property="IsMouseOver" Value="true" должно быть последним, в противном случае DataTriggers для IsSyncing будет всегда перезаписывать его

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