2017-10-24 89 views
0

実行時にスタイルセッターを変更する方法を教えてください。 Material Design for XAMLを使用しています。 ボタンを押すと、明と暗のモードを切り替えることができます。 Snackbarの背景が変更されました(Material Designの作成者が作成したスクリプトを使用して行いました)が、「OK」ボタンの色は変更されません。白い石灰は分かりにくいです。ですから、私はLime OKをPurple OKに変更したいと思います。WPFスタイルを実行時に変更します

ここで最初のコード

 <UserControl.Resources> 

      <Style BasedOn="{StaticResource MaterialDesignSnackbarActionButton}" x:Key="SnackbarThemeChangedStyle" TargetType="Button"> 
       <Setter Property="Foreground" Value="{DynamicResource SecondaryAccentBrush}"/> 
      </Style> 
     </UserControl.Resources> 
     ..... 
     <materialDesign:Snackbar x:Name="SnackbarMaximumCharacters" HorizontalAlignment="Stretch" VerticalContentAlignment="Bottom" ActionButtonStyle="{StaticResource SnackbarThemeChangedStyle}" IsActive="True"> 
       <materialDesign:SnackbarMessage Content="The maximum number of characters is 15" ActionContent="OK" ActionClick="SnackbarMessage_ActionClick"/> 
      </materialDesign:Snackbar> 

(画像1)私はダークモードにスイッチを変更するまでhttps://i.imgur.com/TuqtGO1.png

すべてが大丈夫作品です。 私は、次のコードを持つようにしたいdarkmodeに切り替え:

<UserControl.Resources> 

      <Style BasedOn="{StaticResource MaterialDesignSnackbarActionButton}" x:Key="SnackbarThemeChangedStyle" TargetType="Button"> 
       <Setter Property="Foreground" Value="{DynamicResource PrimaryHueMidBrush}"/> 
      </Style> 
     </UserControl.Resources> 
     ..... 
     <materialDesign:Snackbar x:Name="SnackbarMaximumCharacters" HorizontalAlignment="Stretch" VerticalContentAlignment="Bottom" ActionButtonStyle="{StaticResource SnackbarThemeChangedStyle}" IsActive="True"> 
       <materialDesign:SnackbarMessage Content="The maximum number of characters is 15" ActionContent="OK" ActionClick="SnackbarMessage_ActionClick"/> 
      </materialDesign:Snackbar> 

(画像2)
https://i.imgur.com/44IUanD.png

私は書き込みでacomplishすることができ、同じ結果:ある

<materialDesign:Snackbar x:Name="SnackbarMaximumCharacters" HorizontalAlignment="Stretch" VerticalContentAlignment="Bottom" ActionButtonStyle="{StaticResource MaterialDesignSnackbarActionButton}" IsActive="True"> 
     <materialDesign:SnackbarMessage Content="The maximum number of characters is 15" ActionContent="OK" ActionClick="SnackbarMessage_ActionClick"/> 
    </materialDesign:Snackbar> 

最初のコードボックスに相当するもの:

 <materialDesign:Snackbar x:Name="SnackbarMaximumCharacters" HorizontalAlignment="Stretch" VerticalContentAlignment="Bottom" ActionButtonStyle="{StaticResource MaterialDesignSnackbarActionMidButton}" IsActive="True"> 
     <materialDesign:SnackbarMessage Content="The maximum number of characters is 15" ActionContent="OK" ActionClick="SnackbarMessage_ActionClick"/> 
    </materialDesign:Snackbar> 
番目のコードボックスに

実行時に手作業でコードを修正すると、すべてが機能し、変更が行われますが、コードで実行すると変更は行われません。


私はボタンを押したときにこの変更をコードで行うことはできますか?

+1

あなたは 'StaticResource'の代わりに' DynamicResource'を使ってみましたか? – XAMlMAX

+0

はい、それはうまくいきませんでした – StefanP

答えて

0

StaticResourceとDynamicResourceの違いは、参照元によってリソースがどのように取得されるかを示しています( )。 StaticResourceは、参照元 によって一度だけ取得され、リソースの全期間使用されます。一方、 DynamicResourceは、参照されるオブジェクトが であるたびに取得されます。

StaticResourceDynamicResourceに変更してください。

+0

2の違いについての短いサマリーをありがとう、私のためにそれはうまくいきませんでした。そして8時間のグーグルで、私はここで尋ねることにしました。私の問題 – StefanP

関連する問題