XAML中的按钮样式

时间:2012-05-24 06:05:26

标签: windows-phone-7 xaml expression-blend

我已经以这种方式定制了按钮:

<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#中的标签颜色。

4 个答案:

答案 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进行设计)。