でスタイルのターゲット上のプロパティに私はマウスがButton
上にあるとき、それはGeometry
だ変更Button
内GeometryDrawing
を持つようにしたい:WPFバインドトリガー
<Style TargetType="{x:Type Button}">
<Setter Property="Content">
<Setter.Value>
<Rectangle>
<Rectangle.Fill>
<DrawingBrush>
<DrawingBrush.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<!-- This Binding works -->
<GeometryDrawing Brush="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}"
Geometry="M8,8 1,8 1,3 8,3z M9,9 0,9 0,0 9,0z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</Rectangle.Fill>
</Rectangle>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Content">
<Setter.Value>
<Rectangle>
<Rectangle.Fill>
<DrawingBrush>
<DrawingBrush.Drawing>
<DrawingGroup>
<DrawingGroup.Children>
<!-- This Binding does not work -->
<GeometryDrawing Brush="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Button}}}"
Geometry="M6,9 1,9 1,5 6,5z M7,10 0,10 0,3 7,3z M10,7 7,7 7,6 9,6 9,2 4,2 4,3 3,3 3,0 10,0z" />
</DrawingGroup.Children>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</Rectangle.Fill>
</Rectangle>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
しかし、それは私にこのエラーが発生します
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.Button', AncestorLevel='1''.
とバインディングがにStyle
のSetter
でを動作しますが、しませんので、私は、なぜ知りませんのTrigger
のSetter
。
私はそれがなぜ後者でうまくいかないのか、それを解決するのか分かりません。
ご協力いただきありがとうございます。
EDIT: 私も両方が動作しませんでした、{TemplateBinding Button.Foreground}
と{RelativeSource = {RelativeSource TemplatedParent}}
を試してみましたので、質問は今ある:は、どのように私はTrigger
にStyle
のターゲット上のプロパティにバインドすることができますか? Content
Setters
Style
からとTriggers
を変更は
が、これはトリックを作った、ありがとうございました。また、理由を説明してくれてありがとうございます(つまり、悪い習慣であり、複数の要素とキャッシングに関する問題です)。 –