0

I have customized the button in this way:

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

Now, when a user presses the button I want the OnPress state to change the color of the labels. I can do this if it's a simple button by changing the Pressed state. But my label is placed inside a stack panel. How can I change the color in this case? Or in which event can I change the colors of the labels from C#.

4

4 に答える 4

1

このような場合にPropertyChangeActionを使用できます。これは、Expression Blendの [アセット] タブの [ビヘイビア]カテゴリにあります。

このアクションをラベルに適用します。トリガー プロパティをデフォルトのEventTriggerではなく DataTrigger に変更します。トリガーを DialButton のIsPressedプロパティにバインドします。TextBlock ごとに 2 つの PropertyChangeAction を追加し、一方のtrueに、もう一方をfalseに設定します。

そのうちの 1 つの例を次に示します。もう一つはまったく同じです。

<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

ボタンのクリックイベントでこれを試してください

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

これをカスタム コントロールに変換する必要があります。その後、状態に基づいて各コンポーネントのスタイルを管理できます。

于 2012-05-24T08:23:18.500 に答える
0

このボタンを 1 回だけ使用する場合、おそらく最も簡単な方法は、Expression Blend で .xaml ファイルを開き、Blend を使用して、状態の変更など、必要に応じてボタンをカスタマイズすることです。ボタンを複数の場所で使用している場合は、Matt が提案したようにして、再利用できるカスタム コントロール (Blend を使用して設計することもできます) にします。

于 2012-05-24T13:02:13.530 に答える