无法找到带参考的绑定源

时间:2010-12-13 08:23:41

标签: wpf radio-button datatrigger elementname

我想将MultiDataTrigger.Conditions绑定到单选按钮,但它不起作用。这是我的情景。

在wpf中,我有一个GridPanel,假设其中有radiobuttons。

我在GridPanel中生成动态radiobuttons,如下所示:

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)

为什么会这样?

我可以通过动态命名和生成的RadioButton参考获取IsChecked属性吗?

2 个答案:

答案 0 :(得分:2)

我注意到您在动态生成的对象上将Name属性设置为“allAccountBtn”(单个“帐户”),但您的XAML ElementName引用了“allAccountsBtn”(复数“帐户”) )。尝试将它们改为相同。

答案 1 :(得分:1)

让我们将问题本地化。 尝试直接在XAML中将RadioButton添加到GridPanel,而不是在C#中。 如果错误仍然存​​在,则问题不在于添加控件的动态方式。

我认为模板下控件的“可见性”存在问题。您可以调用yourButton.ApplyTemplate()来强制构建可视化树。但不确定如何在XAML中完成。