0

我以这种方式自定义了按钮:

<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 状态更改标签的颜色。如果它是一个简单的按钮,我可以通过更改 Pressed 状态来做到这一点。但我的标签放在堆栈面板内。在这种情况下如何更改颜色?或者在哪种情况下我可以从 C# 更改标签的颜色。

4

4 回答 4

1

在这种情况下,您可以使用PropertyChangeAction。您可以在 Expression Blend的Assets选项卡上的行为类别中找到它。

将此操作应用于标签。将触发器属性更改为DataTrigger而不是默认的 EventTrigger。将触发器绑定到 DialButton 的IsPressed属性。每个 TextBlock 添加两个 PropertyChangeAction 并将其中一个的Value设置为true,将另一个设置为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"
于 2012-05-27T20:36:13.950 回答
0

您需要将其转换为自定义控件,然后您可以根据状态管理每个组件的样式。

于 2012-05-24T08:23:18.500 回答
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));
于 2012-05-24T09:59:17.597 回答
0

如果您只打算使用此按钮一次,可能最简单的方法是在 Expression Blend 中打开 .xaml 文件,然后使用 Blend 自定义按钮,包括状态更改。如果您在多个地方使用该按钮,请按照 Matt 的建议进行操作,并使其成为您可以重复使用的自定义控件(您也可以使用 Blend 来设计)。

于 2012-05-24T13:02:13.530 回答