トリガーから別のコントロールのプロパティにバインドするにはどうすればいいですか? 質問する

トリガーから別のコントロールのプロパティにバインドするにはどうすればいいですか? 質問する

私の特定のケースでは、TextBox の IsReadOnly プロパティにバインドして、Button の Content プロパティを設定したいと考えています。これらは両方とも同じ StackPanel の一部です。

TextBox の ElementName へのバインディングを持つ DataTrigger と、TextBox 名を SourceName として使用するトリガーを使用してこれを実行してみました。

何かご意見は?

ベストアンサー1

トリガーをスタイルの一部として指定する必要があります。ボタン自体の Triggers コレクションにはイベント トリガーのみを含めることができます。この点を考慮すると、DataTrigger は問題なく機能します。ただし、問題があります。Trigger Setter の値は、ローカルの Content プロパティを上書きしません。そのため、Style でも既定の Content を設定する必要があります。次のようになります。

<Button>  <!-- Note no content set directly on button -->
  <Button.Style>
    <Style TargetType="Button">
      <Setter Property="Content" Value="You may write!!!" />  <!-- Here is the 'normal' content -->
      <Style.Triggers>
        <!-- Here is how we bind to another control's property -->
        <DataTrigger Binding="{Binding IsReadOnly, ElementName=textBox}" Value="True">
          <Setter Property="Content" Value="NO NO NO" />  <!-- Here is the 'override' content -->
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </Button.Style>
</Button>

おすすめ記事