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

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


person VHanded    schedule 13.12.2010    source источник
comment
Если я добавлю переключатель в свой xaml, его можно будет обнаружить, поэтому проблема в том, что ElementName не может найти динамически сгенерированный элемент управления.   -  person VHanded    schedule 14.12.2010


Ответы (2)


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

person yagni    schedule 11.05.2011

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

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

person TarasB    schedule 13.12.2010
comment
Да, проблема в динамически генерируемом RadioButton. Я добавляю RadioButton локально, и он работает без ошибок. Я вызываю GridPanel.ApplyTemplate () после вызова GridPanelChildren.Add (allAccountsBtn), ничего не происходит. То же самое происходит с allAccountsBtn.ApplyTemplate () ... Я должен включить RadioButton динамически, потому что данные взяты из базы данных. - person VHanded; 13.12.2010
comment
Прочитал откуда-то, динамически сгенерированный элемент управления имеет другое пространство имен с локальным элементом управления, но я понятия не имел, что делать с этой подсказкой .. - person VHanded; 13.12.2010