4

我想将 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)

为什么会这样?

我可以通过任何方式从动态命名和生成的 RadioButton 中引用获取 IsChecked 属性吗?

4

2 回答 2

2

我注意到您将Name动态生成的对象的属性设置为“allAccountBtn”(单数“Account”),但您的 XAMLElementName引用了“allAccountsBtn”(复数“Accounts”)。尝试将它们更改为相同。

于 2011-05-11T05:19:20.717 回答
1

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

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

于 2010-12-13T10:07:03.160 回答