2011-02-03 13 views
2

ここでは、ボタンの背景色をクリックすると設定に関するいくつかの質問があります。解決策として、これを使用し これらの質問:WP7 - ボタンをクリックすると背景とBorderBrushが表示されます。

<phone:PhoneApplicationPage ...> 
    <phone:PhoneApplicationPage.Resources> 
     <Style x:Key="ButtonStyle1" TargetType="Button"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="Button"> 
         <Grid Background="Transparent"> 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="CommonStates"> 
            <VisualState x:Name="Normal"/> 
            <VisualState x:Name="MouseOver"/> 
            <VisualState x:Name="Pressed"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneBackgroundBrush}"/> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ButtonBackground"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneForegroundBrush}"/> 
              </ObjectAnimationUsingKeyFrames> 
              <ColorAnimation Duration="0" To="Cyan" Storyboard.TargetProperty="(Border.Background).(SolidColorBrush.Color)" Storyboard.TargetName="ButtonBackground" d:IsOptimized="True"/> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="Disabled"> 
             <Storyboard> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentContainer"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> 
              </ObjectAnimationUsingKeyFrames> 
              <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="ButtonBackground"> 
               <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneDisabledBrush}"/> 
              </ObjectAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
          <Border x:Name="ButtonBackground" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="0" Margin="{StaticResource PhoneTouchTargetOverhang}" Background="Black"> 
           <ContentControl x:Name="ContentContainer" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" Foreground="{TemplateBinding Foreground}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Padding="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
          </Border> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </phone:PhoneApplicationPage.Resources> 

    <Grid x:Name="LayoutRoot" Background="Transparent"> 
     <Button Content="Button" Style="{StaticResource ButtonStyle1}"/> 
    </Grid> 
</phone:PhoneApplicationPage> 

が、私はこのテンプレートを使用しているよもBorderBrushフォアグラウンド色を設定するには、私の微調整は、このXAMLは悪い効果になってしまっただけました。

は[注:色はスタイルによって上書きされるため、動作が、私は分離コードで色を設定したときに私のアプリが実行されたとき、彼らは有効にならないことがある。]

答えて

3

- あなたはそれが間違ってやっています。

XAMLの禅と戦わないでください。 Embrace ExpressionをすべてのGUIデザインの開発ワークフローにブレンドするか、手動XAML編集の謎を解きほぐしてください。

特にVisualStateManagermの手動編集では、XAMLはSilverlightチームによって設計されたように全く意味をなさないので、Expression Blendから最適に使用できます。

これら4つの方法を見て30分を過ごすことを強くお勧めします。スティーブホワイトのVSMビデオ@http://expression.microsoft.com/en-us/cc643423.aspx

これらの4つのビデオは、VSMの使用方法を理解するための初期の段階で、私のUIロジックをビジュアルステートに正しく表現する方法について多くの助けになりました。クリックで変更する背景色を取得Expression Blendので

は同じくらい簡単ですなど:

  1. ドラッグ&ドロップ& Expression Blendの中に新しいボタン。
  2. 右クリックし、[テンプレートの編集 - >コピーの編集]をクリックします。
  3. 「状態」ペインから「押し込まれた」VSM状態を選択します。
  4. "ButtonBackground"の背景色を変更します。
+0

あなたのコメントは理にかなっており、私はいくつかのブレンドに取り組んできました。私の唯一の問題は、コードビハインドで色を設定できるようにボタンを調整し、バズーカで蟻を殺すのと同じようにブレンドを使用しなければならないことだけです。多分WP7/Silverlight/WPFに関する解説です。 – pearcewg

+0

私が望んでいた解決策ではありませんが、正しい解決策と思われます。洞察力のある答えに感謝します。 – pearcewg

+0

ブレンドはペイントブラシで、Visual Studio XAML編集はバズーカです。 Silverlight/WPFでUIを設計するときは、常にBlendを使用する必要があります。 – JustinAngel

関連する問題