Не удается найти источник для привязки со ссылкой
Я хочу привязать мой 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.