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>

プログラムを実行すると、エラー コードが表示されます:「参照を使用してバインドするためのソースが見つかりません」、条件は 2 番目の条件 (elementName=allAccountsBtn) に対して false を返します。

なぜこれが起こるのですか?

動的に名前が付けられ、生成された RadioButton から IsChecked プロパティを取得する方法はありますか?

4

2 に答える 2

2

Name動的に生成されたオブジェクトのプロパティを "allAccountBtn" (単数の "Account") に設定していることに気付きましたが、XAMLElementNameは "allAccountsBtn" (複数の "Accounts") を参照しています。同じになるように変更してみてください。

于 2011-05-11T05:19:20.717 に答える
1

問題をローカライズしましょう。C# ではなく、RadioButton を XAML で直接 GridPanel に追加してみてください。エラーが続く場合は、コントロールを動的に追加する方法に問題はありません。

テンプレートの下のコントロールの「可視性」に問題があると思います。yourButton.ApplyTemplate() を呼び出して、ビジュアル ツリーの構築を強制できます。しかし、それが XAML でどのように行われるかはわかりません。

于 2010-12-13T10:07:03.160 に答える