我试图设计一个按钮模板,它在按下时交换颜色。在按下按钮模板时交换颜色
不幸的是我不能得到它的工作。
我正在使用BorderBrush作为临时变量。很可能有更复杂的解决方案。
这是我的代码。
<Style TargetType="{x:Type Button}">
<Style.Setters>
<Setter Property="Foreground"
Value="{StaticResource RahmenFarbe}" />
<Setter Property="Background"
Value="{StaticResource HintergrundFarbe}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Grid Width="{TemplateBinding Width}"
Height="{TemplateBinding Height}"
ClipToBounds="True">
<Border BorderBrush="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Button, AncestorLevel=1}, Path=Foreground}"
x:Name="ButtonBorder"
CornerRadius="25"
BorderThickness="4"
Background="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Button, AncestorLevel=1}, Path=Background}"
RenderTransformOrigin="0.5,0.5">
<TextBlock x:Name="ButtonTextBlock"
Foreground="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=Button, AncestorLevel=1}, Path=Foreground}"
VerticalAlignment="Center"
HorizontalAlignment="Center">
<ContentPresenter x:Name="myContentPresenter"
Content="{TemplateBinding Content}" />
</TextBlock>
</Border>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed"
Value="True">
<Setter Property="BorderBrush"
Value="{Binding Mode=OneTime, Path=Foreground}" />
<Setter Property="Foreground"
Value="{Binding Mode=OneTime, Path=Background}" />
<Setter Property="Background"
Value="{Binding Mode=OneTime, Path=BorderBrush}" />
</Trigger>
</ControlTemplate.Triggers >
</ControlTemplate>
</Setter.Value>
</Setter>
</Style.Setters>
</Style>
任何帮助,将不胜感激。
问候塞巴斯蒂安
我绝对同意。但我喜欢存档的另一件事是,当我更改按钮中的颜色时,行为(交换)保持不变。这看起来很尴尬,如果硬编码的颜色。我担心我必须去找代码(borderbrush刚刚被滥用作为临时变量) – Athanviel
但是您已经在模板中将Foreground和Background设置为静态资源,它是如何被滥用的?如果你想使其动态化,可以使用'DynamicResource'来代替你需要的地方。另一种选择是使用附加属性。您将无法通过将前景设置为背景来交换它们,因为背景也在变化 –
实际上,我将边框的前景和背景绑定到按钮的边框。那些绑定应该是静态的。在触发器中,我更改按钮属性,所以其他绑定不应该受到影响。我试图通过“绑定模式=一次”来避免自动更改。 DynamicResource没有按照我的意图工作,但也许我没有正确使用它。 – Athanviel