Не удается найти источник для привязки со ссылкой

Я хочу привязать мой 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>

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

Почему это случилось?

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

2 ответа

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

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

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

Другие вопросы по тегам