2010-12-13 4 views
4

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

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

Я генерировать динамические радиокнопки Into GridPanel, как это:

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

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

вот мой код:

<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?

+0

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

ответ

1

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

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

+0

Да, проблема заключается в динамическом создании RadioButton. Я добавляю RadioButton локально, и он работает без ошибок. Я вызываю GridPanel.ApplyTemplate() после вызова GridPanelChildren.Add (allAccountsBtn), ничего не происходит. То же самое происходит с allAccountsBtn.ApplyTemplate() ... Я должен включить RadioButton динамически, потому что данные взяты из базы данных. – VHanded

+0

Читайте откуда-то, динамически созданный элемент управления имеет другое пространство имен с локальным управлением, но я не знал, как справиться с этой подсказкой. – VHanded

+0

Все в порядке, у меня есть обходной путь. Благодарю. – VHanded

2

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

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