我試圖設計一個按鈕模板,它在按下時交換顏色。在按下按鈕模板時交換顏色
不幸的是我不能得到它的工作。
我正在使用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