Не удается найти источник для привязки со ссылкой - PullRequest
4 голосов
/ 13 декабря 2010

Я хочу привязать мой MultiDataTrigger.Conditions к переключателю, но он не работает. вот мой сценарий.

В wpf у меня есть GridPanel, в которой предполагается, что в ней есть радиокнопки.

Я генерирую динамические радиокнопки в GridPanel, например:

RadioButton allAccountBtn = new RadioButton();
allAccountBtn.Name = "allAccountBtn";
GridPanel.Children.Add(allAccountBtn);

затем в моем xaml у меня была кнопка изображения, которая будет меняться в зависимости от выбора радиокнопки, и свойство другого элемента управления.

вот мой код:

<Button>
 <Button.Template>
        <ControlTemplate>
               <Image Name="addFolderIcon" Source="Icon/Decoration/folderColor.png">
               <ControlTemplate.Triggers>
                       <MultiDataTrigger>
                             <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding Tag, ElementName=folderBackBtn}" Value="{x:Null}"/>
                                    <Condition Binding="{Binding IsChecked, ElementName=allAccountsBtn}" Value="True"/>
                             </MultiDataTrigger.Conditions>
                             <Setter Property="Control.IsEnabled" Value="False"/>
                             <Setter TargetName="addFolderIcon" Property="Source" Value="Icon/Decoration/folder.png"/>
                       </MultiDataTrigger>
               </ControlTemplate.Triggers>
         </ControlTemplate>
 </Button.Template>
</Button>

Когда я запускаю программу, она отображает код ошибки: «Не удается найти источник для привязки со ссылкой», а условия возвращают ложное значение для второго условия (elementName = allAccountsBtn)

Почему это происходит?

Как я могу обратиться, чтобы получить свойство IsChecked из динамически именованного и сгенерированного RadioButton?

Ответы [ 2 ]

2 голосов
/ 11 мая 2011

Я заметил, что вы устанавливаете свойство Name для своего динамически сгенерированного объекта в "allAccountBtn" (единственное "Account"), но ваш XAML ElementName ссылается на "allAccountsBtn" (множественное число "Accounts").Попробуйте изменить их, чтобы они были одинаковыми.

1 голос
/ 13 декабря 2010

Давайте локализуем проблему.Попробуйте добавить RadioButton прямо в XAML на вашу GridPanel, а не в C #.Если ошибка не устранена, проблема заключается не в динамическом способе добавления элемента управления.

Я думаю, что существует проблема с «видимостью» элементов управления в шаблонах.Вы можете вызвать yourButton.ApplyTemplate () для принудительного построения визуального дерева.Но не уверен, как это делается в XAML.

...