2016-10-13 2 views
1

У меня есть UserControl с сеткой в ​​нем, и я создаю столбец прямоугольников в моем коде. Пользователь UserControl имеет некоторые свойства зависимостей, которым я должен привязывать прямоугольники. Первоначально я сделал это в XAML со следующей разметке:программная привязка WPF не работает

<Rectangle Fill="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=MeterBarColor}" 
        Grid.Row="0" 
        Margin="2,2,2,0" /> 

Это связывание работал, однако мне нужно создать столбец прямоугольников динамически, поэтому я попытался создать привязку в моем коде позади, как это:

Dim oBinding As New Binding("{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=MeterBarColor}") 
oRectangle.SetBinding(Rectangle.FillProperty, oBinding) 

Когда я запускаю приложение, я получаю ошибки для каждой попытки привязки, заявляя, что свойство не найдено.

Надеюсь кто-то может помочь мне решить эту проблему, Sid

+0

взглянуть [здесь] (http://stackoverflow.com/a/19794715/4838058). – Funk

ответ

0

Аргумент Binding constructor you use является путь, не {Binding ...} выражение. Таким образом, вам необходимо позвонить New Binding("MeterBarColor"), а затем установить свойство RelativeSource.

Или вы можете использовать конструктор без параметров и object initializers:

Dim oBinding As New Binding() { 
    .RelativeSource = New RelativeSource(RelativeSourceMode.FindAncestor, 
             GetType(UserControl), 1), 
    .Path = "MeterBarColor" 
} 
oRectangle.SetBinding(Rectangle.FillProperty, oBinding) 
+0

Большое спасибо, я понял ошибку моего параметра привязки и после вашего совета мой контроль теперь связывается правильно. Я ценю, что вы нашли время, чтобы помочь. – Sid

+0

@ СИД: Добро пожаловать. Вы можете [пометить мой ответ как «принятый» ответ] (http://stackoverflow.com/help/accepted-answer), используя галочку рядом с ним, чтобы ваш вопрос больше не отображался «без ответа». – Heinzi

Смежные вопросы