我想将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属性吗?
答案 0 :(得分:2)
我注意到您在动态生成的对象上将Name
属性设置为“allAccountBtn”(单个“帐户”),但您的XAML ElementName
引用了“allAccountsBtn”(复数“帐户”) )。尝试将它们改为相同。
答案 1 :(得分:1)
让我们将问题本地化。 尝试直接在XAML中将RadioButton添加到GridPanel,而不是在C#中。 如果错误仍然存在,则问题不在于添加控件的动态方式。
我认为模板下控件的“可见性”存在问题。您可以调用yourButton.ApplyTemplate()来强制构建可视化树。但不确定如何在XAML中完成。