繁体   English   中英

XAML中的按钮样式

[英]Button Styling in XAML

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

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

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

在标签上应用此操作。 将触发器属性更改为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"

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

在按钮的点击事件中尝试此操作

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));

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM