2017-01-03 10 views
1

ボタンをユーザーがマウスの上に置いたときに、デフォルトのフォント色を設定する方法を探していました。瞬間彼らはすべてデフォルトの黒になります。私がHTML/CSSでこれをやっていたら、ホバースタイルを使いますが、XAMLで同じ効果をどうやって行うのか分からないようです。XAML Win 10のすべてのボタンにフォーカス/ホバーフォアグラウンドカラーを設定しようとしていますUAP

どのような提案も素晴らしいでしょう。 ありがとう、 Coop

答えて

1

ここには2つの方法があります。

ボタンのデフォルトスタイル(ボタンのホバーカラーを決定する)を上書きすることもできます。ほとんどのXAMLコントロールの既定のスタイルはon MSDNで、コンピュータ上の既定値はC:\Program Files (x86)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\10.0.<WindowsBuildNumber>.0\Genericです。ファイルgeneric.xamlthemeresources.xamlには、すべてデフォルトスタイルとテーマ定義があります。

既存のコントロールのデフォルトスタイルのコピーを生成する簡単な方法は、あなたのページ(または何でも)をBlendで開き、そのコントロールのインスタンスを右クリックし、[テンプレートの編集] - > [Edit Copy "それは、そのコントロールのスタイルのコピーを作成します。ブレンドを使用してスタイルのコピーを生成すると、自動的に名前が付けられます。あなたがEVERYボタンのスタイルを上書きする場合は、すなわち、名前を持っているあなたのスタイルをしないでください。

<Style TargetType="Button"> 
    <!--Your custom style goes here--> 
</Style> 

次に、あなたが変更されたいスタイルの一部は、このセクションのようになります。

<VisualState x:Name="PointerOver"> 
    <Storyboard> 
     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" 
             Storyboard.TargetProperty="BorderBrush"> 
      <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseMediumLowBrush}" /> 
     </ObjectAnimationUsingKeyFrames> 
     <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" 
             Storyboard.TargetProperty="Foreground"> 
      <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightBaseHighBrush}" /> 
     </ObjectAnimationUsingKeyFrames> 
     <PointerUpThemeAnimation Storyboard.TargetName="RootGrid" /> 
    </Storyboard> 
</VisualState> 

ContentPresenterのStoryboard.TargetNameとフォアグラウンドのStoryboard.TargetPropertyを使用してObjectAnimationUsingKeyFrameを参照してください。これは、ボタンのテキストの色を変更する部分です。だからあなたがしなければならないことは、その値を{ThemeResource SystemControlHighlightBaseHighBrush}からあなたが望むものに変更することだけです。 ButtonのForegroundプロパティはBrushを必要としますが、16進数のカラーコードは暗黙的にSolidColorBrushに変換されるため、たとえば#FFFFFFを値として使用できます。

または、既定のスタイルで、ボタンが{ThemeResource SystemControlHighlightBaseHighBrush}の値を使用してフォアグラウンドの色を決定する方法を確認しますか?実際にそのブラシをオーバーライドすることができます。それはThemeResourceなので、Theme Dictionaryでそれを上書きしたいと思うでしょう。だから、あなたのApp.xamlで、あなたはこのような何かをしたいと思います:

<ResourceDictionary.ThemeDictionaries> 
    <ResourceDictionary x:Key="Light"> 
     <SolidColorBrush x:Key="SystemControlHighlightBaseHighBrush" Color="your light theme color here"/> 
    </ResourceDictionary> 
    <ResourceDictionary x:Key="Default"> <!--The dark theme is considered "default".--> 
     <SolidColorBrush x:Key="SystemControlHighlightBaseHighBrush" Color="your dark theme color here"/> 
    </ResourceDictionary> 
    <!--And for extra bonus points....--> 
    <ResourceDictionary x:Key="HighContrast"> 
     <SolidColorBrush x:Key="SystemControlHighlightBaseHighBrush" Color="your high contrast theme color here"/> 
    </ResourceDictionary> 
</ResourceDictionary.ThemeDictionaries> 

は、様々なスタイルの多くは、それはおそらく意図せぬ副作用の多くを持つことになります変更、そのブラシに依存していること、しかし注意して。

希望に役立ちます!

+0

ありがとう、ありがとうございます。いくつかの類似した「解決策」を見つけましたが、WPFの欠点や欠点があります。全体のプロセスを一緒にして作業するのは素晴らしい – Coopstercoop

関連する問題