1

私はこれを私のスタイルのXAMLに持っています:

<DataTrigger Binding="{Binding Path=ButtonStyle}" Value="CutLeft">
  <DataTrigger.Setters>
    <Setter Property="CornerRadius" TargetName="border" Value="0 11 11 0" />
    <Setter Property="CornerRadius" TargetName="border1" Value="0 10 10 0" />
  </DataTrigger.Setters>
</DataTrigger>

そして、私がボタンを持っている私のウィンドウのこのXAML:

<gui:MyCustomButton ButtonStyle="CutLeft"/>

そしてMyCustomButtonコードでは:

public enum ButtonStyles {
    CutLeft, CutRight, Circular, Normal
}

public partial class MyCustomButton 
{
    [DefaultValue(ButtonStyles.Normal)]
    public ButtonStyles ButtonStyle { get; set; }
}

しかし、それは機能しません!任意のヒント?

4

1 に答える 1

3

ここにはいくつか問題があると思います。

1つ目は、ButtonStyleのプロパティ変更通知を発生させていないことです。ButtonStyleを依存関係プロパティに変更するか、MyCustomButtonにINotifyPropertyChangedを実装し、ButtonStyleセッターからPropertyChangedイベントを発生させます。この場合、依存関係プロパティのアプローチの方がおそらく優れています。これは、ある時点で誰かがスタイルを介してButtonStyleを設定したいと思うようになり、DPのみがスタイル設定できるためです。

2つ目は、データトリガーがデータコンテキストを監視しているように見えることです。これはおそらくコントロールではありません。([出力]ウィンドウを見ると、一部のデータオブジェクトで'ButtonStyle'プロパティが見つからないというバインディングエラーが表示される可能性があります。)これを回避するRelativeSource={RelativeSource Self}には、DataTriggerに追加します。ただし、提案されているようにButtonStyleをDPに変更すると、スタイル設定されているコントロールのプロパティに対して自動的に機能する、単純な古いトリガーを使用できるようになります。

<Style.Triggers>
  <Trigger Property="ButtonStyle" Value="CutLeft">
    <Setter Property="CornerRadius" TargetName="border" Value="0 11 11 0" />
  </Trigger>
</Style.Triggers>

Trigger.Setters(または要素を指定する必要がないことにも注意してくださいDataTrigger.Setters。XAMLリーダーがそれを入力します。)

于 2010-03-12T19:57:32.947 に答える