我已经以这种方式定制了按钮:
<Button BorderBrush="Transparent" Name="DialButton" Click="DialButton_Click" >
<StackPanel Orientation="Horizontal">
<TextBlock FontSize="43" Name="lblNumber" Margin="0,-5,0,0" />
<TextBlock FontSize="12" Margin="5,20,0,0" Name="lblCharacter" />
</StackPanel>
</Button>
现在,当用户按下按钮时,我希望OnPress状态改变标签的颜色。如果它是一个简单的按钮,我可以通过改变按下状态来做到这一点。但我的标签放在堆栈面板内。在这种情况下如何更改颜色?或者我可以在哪种情况下更改C#中的标签颜色。
答案 0 :(得分:1)
在这种情况下,您可以使用 PropertyChangeAction 。您可以在Expression Blend的 Assets 选项卡上的 behavior 类别中找到它。
在标签上应用此操作。将触发器属性更改为 DataTrigger 而不是默认的EventTrigger。将触发器绑定到DialButton的 IsPressed 属性。为每个TextBlock添加两个PropertyChangeActions,并为 true 中的一个设置 Value ,将另一个设置为 false 。
以下是其中一个例子。另一个是完全相同的。
<TextBlock FontSize="43" x:Name="lblNumber" Margin="0,-5,0,0" Text="25">
<i:Interaction.Triggers>
<ec:DataTrigger Binding="{Binding IsPressed, ElementName=DialButton}" Value="true">
<ec:ChangePropertyAction PropertyName="Foreground">
<ec:ChangePropertyAction.Value>
<SolidColorBrush Color="Red"/>
</ec:ChangePropertyAction.Value>
</ec:ChangePropertyAction>
</ec:DataTrigger>
<ec:DataTrigger Binding="{Binding IsPressed, ElementName=DialButton}" Value="false">
<ec:ChangePropertyAction PropertyName="Foreground">
<ec:ChangePropertyAction.Value>
<SolidColorBrush Color="{StaticResource PhoneForegroundColor}"/>
</ec:ChangePropertyAction.Value>
</ec:ChangePropertyAction>
</ec:DataTrigger>
</i:Interaction.Triggers>
</TextBlock>
如果 i:或 ec:无效,请确保您已将这些行放在xaml文件的顶部。
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:ec="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
答案 1 :(得分:0)
您需要将其转换为自定义控件,然后您可以根据状态管理每个组件的样式。
答案 2 :(得分:0)
在按钮
的点击事件中尝试此操作Button butClicked = (Button)sender;
StackPanel panel1 = (StackPanel)butClicked.Content;
var child1Panel1 = panel1.Children[0] as TextBlock;
child1Panel1.Foreground = new SolidColorBrush(Color.FromArgb(255, 18, 18, 18));
答案 3 :(得分:0)
如果您只打算使用此按钮一次,最简单的方法可能是在Expression Blend中打开.xaml文件,并使用Blend根据需要自定义按钮,包括状态更改。如果您在多个地方使用该按钮,请按照Matt的建议进行操作,并将其设置为可以重复使用的自定义控件(您也可以使用Blend进行设计)。