MahApps.Metroでカスタムアクセントを作成する方法は?

フロリアンコッホ

フライアウトのデフォルトスタイルを上書きしようとしています。すべてのスタイルを独自のResourceDictionaryに移動して使用しようとしましたが、<Style x:Key="DefaultFlyout" TargetType="controls:Flyout" BasedOn="{StaticResource {x:Type controls:Flyout}}">入力した内容は常に無視されBasedOnます。{StaticResource Flyout}は不明な識別子であり、DynamicResourceではサポートされいないため、直接使用することはできませんBasedOn

私のリソース辞書Controls.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:controls="http://metro.mahapps.com/winfx/xaml/controls">

    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />

        ... <!-- other custom resourceDictionaries -->

        <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.AnimatedSingleRowTabControl.xaml" />
    </ResourceDictionary.MergedDictionaries>
    ...
    <Style x:Key="DefaultFlyout" TargetType="controls:Flyout" BasedOn="{StaticResource {x:Type controls:Flyout}}">
        <Setter Property="Theme" Value="Accent" />
    </Style>
</ResourceDictionary>

App.xamlそれが含まれる場合:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MyApplication;component/View/Controls.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.AnimatedSingleRowTabControl.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MyApplication;component/View/CustomAccent.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/baselight.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

そして、フライアウトを使いたい部分はMainWindow.xaml<controls:FlyoutsControl>

<controls:FlyoutsControl.ItemContainerStyle>
    <Style BasedOn="{StaticResource DefaultFlyout}"
       TargetType="{x:Type controls:Flyout}">
        <Setter Property="Header"
            Value="{Binding Header}" />
        <Setter Property="IsOpen"
            Value="{Binding Visible}" />
        <Setter Property="Position"
            Value="{Binding Position, Converter={StaticResource FlyoutPositionConverter}}" />
        <Setter Property="IsModal"
            Value="{Binding IsModal}" />
    </Style>
</controls:FlyoutsControl.ItemContainerStyle>

結果は次のとおりです。

ここに画像の説明を入力してください

使用し<Setter Property="Theme" Value="Accent" />ので青いフライアウトになるはずですが、機能しません。

なぜこれが機能しないのか誰かが考えていますか?変更を加えるためだけにフライアウトスタイル全体をコピーするというアイデアはあまり好きではありません...


問題は私のカスタムアクセントのようですが、通常のアクセントを使用していくつかの色を変更しただけで、これは意味がありません。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:options="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
                    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
                    mc:Ignorable="options">

    <!--ACCENT COLORS-->
    <Color x:Key="HighlightColor">#FF009FDA</Color> <!-- changed -->
    <Color x:Key="AccentColor">#FF009FDA</Color> <!-- changed -->
    <Color x:Key="AccentColor2">#CC009FDA</Color> <!-- changed -->
    <Color x:Key="AccentColor3">#99009FDA</Color> <!-- changed -->
    <Color x:Key="AccentColor4">#66009FDA</Color> <!-- changed -->

    <!-- re-set brushes too -->
    <SolidColorBrush x:Key="HighlightBrush" Color="{StaticResource HighlightColor}" options:Freeze="True" />
    <SolidColorBrush x:Key="AccentColorBrush" Color="{StaticResource AccentColor}" options:Freeze="True" />
    <SolidColorBrush x:Key="AccentColorBrush2" Color="{StaticResource AccentColor2}" options:Freeze="True" />
    <SolidColorBrush x:Key="AccentColorBrush3" Color="{StaticResource AccentColor3}" options:Freeze="True" />
    <SolidColorBrush x:Key="AccentColorBrush4" Color="{StaticResource AccentColor4}" options:Freeze="True" />

    <SolidColorBrush x:Key="WindowTitleColorBrush" Color="{StaticResource AccentColor}" options:Freeze="True" />

    <LinearGradientBrush x:Key="ProgressBrush" EndPoint="0.001,0.5" StartPoint="1.002,0.5" options:Freeze="True">
        <GradientStop Color="{StaticResource HighlightColor}" Offset="0" />
        <GradientStop Color="{StaticResource AccentColor3}" Offset="1" />
    </LinearGradientBrush>

    <SolidColorBrush x:Key="CheckmarkFill" Color="{StaticResource AccentColor}" options:Freeze="True" />
    <SolidColorBrush x:Key="RightArrowFill" Color="{StaticResource AccentColor}" options:Freeze="True" />

    <Color x:Key="IdealForegroundColor">White</Color>
    <SolidColorBrush x:Key="IdealForegroundColorBrush" Color="{StaticResource IdealForegroundColor}" options:Freeze="True" />
    <SolidColorBrush x:Key="IdealForegroundDisabledBrush" Color="{StaticResource IdealForegroundColor}" Opacity="0.4" options:Freeze="True" />
    <SolidColorBrush x:Key="AccentSelectedColorBrush" Color="{StaticResource IdealForegroundColor}" options:Freeze="True" />

    <!-- DataGrid brushes -->
    <SolidColorBrush x:Key="MetroDataGrid.HighlightBrush" Color="{StaticResource AccentColor}" options:Freeze="True" />
    <SolidColorBrush x:Key="MetroDataGrid.HighlightTextBrush" Color="{StaticResource IdealForegroundColor}" options:Freeze="True" />
    <SolidColorBrush x:Key="MetroDataGrid.MouseOverHighlightBrush" Color="{StaticResource AccentColor3}" options:Freeze="True" />
    <SolidColorBrush x:Key="MetroDataGrid.FocusBorderBrush" Color="{StaticResource AccentColor}" options:Freeze="True" />
    <SolidColorBrush x:Key="MetroDataGrid.InactiveSelectionHighlightBrush" Color="{StaticResource AccentColor2}" options:Freeze="True" />
    <SolidColorBrush x:Key="MetroDataGrid.InactiveSelectionHighlightTextBrush" Color="{StaticResource IdealForegroundColor}" options:Freeze="True" />

    <SolidColorBrush x:Key="OverlayBrush" Color="Black" Opacity="0.7"/>  <!-- added -->
</ResourceDictionary>
jsanalytics

これはどうですか:

<Controls:MetroWindow x:Class="MahApps.Metro.Application5.MainWindow"
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
                  Title="MainWindow"
                  Height="350"
                  Width="525" Loaded="MetroWindow_Loaded">
<Controls:MetroWindow.Resources>
    <Style x:Key="FlyoutStyle1" TargetType="{x:Type Controls:Flyout}">
        <Setter Property="Theme" Value="Accent"></Setter>
    </Style>
</Controls:MetroWindow.Resources>
<Controls:MetroWindow.Flyouts>
    <Controls:FlyoutsControl>
        <Controls:Flyout Header="My Sample Flyout"
                         Position="Right"
                         Style="{DynamicResource FlyoutStyle1}">
            <TextBlock Text="This is a sample flyout."></TextBlock>
        </Controls:Flyout>
    </Controls:FlyoutsControl>
</Controls:MetroWindow.Flyouts>
<Grid>
    <Button Click="Button_Click" RenderTransformOrigin="0.071,0.492" HorizontalAlignment="Left" VerticalAlignment="Center">Flyout Test</Button>
</Grid>

ここに画像の説明を入力してください

次の手順を実行しても、を使用しなくても同じ結果を得ることができますStyle

 <Controls:Flyout Header="My Sample Flyout"
                         Position="Right"
                         Theme="Accent">

編集BasedOnスタイルの使用

<Controls:MetroWindow.Flyouts>
    <Controls:FlyoutsControl ItemContainerStyle="{DynamicResource FlyoutStyle2}">
        <Controls:Flyout Position="Right">
            <TextBlock Text="This is a sample flyout."/>
        </Controls:Flyout>
    </Controls:FlyoutsControl>
</Controls:MetroWindow.Flyouts>

辞書:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
                xmlns:local="clr-namespace:MahApps.Metro.Application5">

<Style x:Key="FlyoutStyle1" TargetType="{x:Type Controls:Flyout}">
    <Setter Property="Theme" Value="Accent"></Setter>
</Style>
<Style x:Key="FlyoutStyle2" TargetType="{x:Type Controls:Flyout}" BasedOn="{StaticResource FlyoutStyle1}">
    <Setter Property="Header" Value="{Binding Header}" />
</Style>
</ResourceDictionary>

編集2:完全な実装の詳細を投稿します。

MainWindow.xaml:

<Controls:MetroWindow
                  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                  xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
                  xmlns:local="clr-namespace:MahApps.Metro.Application5" 
                  x:Class="MahApps.Metro.Application5.MainWindow"
                  Title="MainWindow"
                  Height="350"
                  Width="525">
<Controls:MetroWindow.Flyouts>
    <Controls:FlyoutsControl ItemContainerStyle="{DynamicResource FlyoutStyle2}">
        <Controls:Flyout Position="Right">
            <TextBlock Text="This is a sample flyout."/>
        </Controls:Flyout>
    </Controls:FlyoutsControl>
</Controls:MetroWindow.Flyouts>

<Controls:MetroWindow.DataContext>
    <local:MyViewModel/>
</Controls:MetroWindow.DataContext>

<Grid>
    <Button Click="Button_Click" RenderTransformOrigin="0.071,0.492" VerticalAlignment="Center" Content="Flyout Test" HorizontalAlignment="Left"/>
</Grid>

MainWindow.cs:

 public partial class MainWindow : MetroWindow
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        var flyout = this.Flyouts.Items[0] as Flyout;

        flyout.IsOpen = !flyout.IsOpen;
    }
}

App.xaml:

<Application x:Class="MahApps.Metro.Application5.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         StartupUri="MainWindow.xaml">
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Colors.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/Blue.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/BaseLight.xaml" />
            <ResourceDictionary Source="pack://application:,,,/Dictionary1.xaml"></ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Dictionary1.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:Controls="http://metro.mahapps.com/winfx/xaml/controls"
                xmlns:local="clr-namespace:MahApps.Metro.Application5">

<Style x:Key="FlyoutStyle1" TargetType="{x:Type Controls:Flyout}">
    <Setter Property="Theme" Value="Accent"></Setter>
</Style>
<Style x:Key="FlyoutStyle2" TargetType="{x:Type Controls:Flyout}" BasedOn="{StaticResource ResourceKey=FlyoutStyle1}">
    <Setter Property="Header" Value="{Binding Header}" />
</Style>

MyViewModel.cs:

public class MyViewModel
{
    public MyViewModel()
    {
        Header = "My Header";
    }
    public string Header { get; set; }
}

編集3:カスタムアクセントの作成に関する注意:

調べてみるThemeManager.csと、既存の色とアクセントの間にハードコーディングがあるため、新しい色を作成するのは簡単ではないかもしれません。以下のコードスニペットを参照してください。

var colors = new[] {
   "Red", "Green", "Blue", "Purple", "Orange", "Lime", "Emerald", "Teal", "Cyan", "Cobalt",
   "Indigo", "Violet", "Pink", "Magenta", "Crimson", "Amber", "Yellow", "Brown", "Olive", "Steel", "Mauve", "Taupe", "Sienna"
  };

 foreach (var color in colors)
 {
   var resourceAddress = new Uri(string.Format("pack://application:,,,/MahApps.Metro;component/Styles/Accents/{0}.xaml", color));
   _accents.Add(new Accent(color, resourceAddress));
 }

編集4:新しいアクセントを追加します。

MyCustomAccent文字列を追加しますThemeManager.cs

var colors = new[] {
    "Red", "Green", "Blue", "Purple", "Orange", "Lime", "Emerald", "Teal", "Cyan", "Cobalt",
     "Indigo", "Violet", "Pink", "Magenta", "Crimson", "Amber", "Yellow", "Brown", "Olive", "Steel", "Mauve", "Taupe", "Sienna", "MyCustomAccent"
};

既存のファイルの1つをモデルとして使用して、他の既存のファイルと一緒にフォルダーのMyCustomAccent.xamlに作成、必要にStyles/Accents応じてアクセントカラーを定義します。例えば:

<!--ACCENT COLORS-->
<Color x:Key="HighlightColor">#FF9F00DA</Color>
<!-- changed -->
<Color x:Key="AccentColor">#FF9F00DA</Color>
<!-- changed -->
<Color x:Key="AccentColor2">#CC9F00DA</Color>
<!-- changed -->
<Color x:Key="AccentColor3">#999F00DA</Color>
<!-- changed -->
<Color x:Key="AccentColor4">#669F00DA</Color>
<!-- changed -->

追加のエントリMyCustomAccent.xamlApp.xamlリソースディクショナリ:

<ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Accents/MyCustomAccent.xaml" />

次のコードをに追加しますMainWindow.cs

private void MetroWindow_Loaded(object sender, RoutedEventArgs e)
{
    var theme = ThemeManager.DetectAppStyle(Application.Current);
    var accent = ThemeManager.GetAccent("MyCustomAccent");
    ThemeManager.ChangeAppStyle(Application.Current, accent, theme.Item1);
}

MahApps.Metroとアプリケーションの両方再コンパイルします。Flyout新しく作成したカスタムアクセントを使用:

ここに画像の説明を入力してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Prism InteractionRequest + MahApps.Metro

分類Dev

PRISM 5 + MahApps.Metro

分類Dev

Mahapps.Metro:カスタムアイコンテキストボックス

分類Dev

MahApps.Metro.Controls.Dialogを使用してメッセージボックスを作成する方法は?

分類Dev

WPF MahApps.Metro AnimatedSingleRowTabControl FontSize

分類Dev

Mahapps.MetroでWindowButtonCommandsスタイルを設定する

分類Dev

MahApps.Metro Group ボックス ヘッダーにボタンを追加する

分類Dev

MahApps.Metroカスタムダイアログを作成して表示する-ステップバイステップのハウツー

分類Dev

Mahapps.Metroの既存のスタイルにカスタムスタイルを追加する

分類Dev

Mahapps.Metroの既存のスタイルにカスタムスタイルを追加する

分類Dev

MahApps.Metroを使用したWPFCheckComboBoxスタイリング

分類Dev

Multiple view models with MahApps.Metro within TabControl

分類Dev

MahApps.Metroダークテーマを適用する

分類Dev

Mahappsカスタムタイトルバーの色

分類Dev

Mahappsデータグリッド検証

分類Dev

MahApps.MetroからShowInputAsyncにアクション付きのボタンを追加するにはどうすればよいですか?

分類Dev

MahApps.MetroProgressリングの速度変更

分類Dev

ElementhostでのMahapps.MetroFlyoutsの使用

分類Dev

Caliburnを使用したMahApps.MetroMetroTabControl

分類Dev

MahApps.Metroでタイトルバーにウィンドウアイコンを表示しますか?

分類Dev

MahappsでShowInputAsyncダイアログの結果を取得する方法

分類Dev

Mahappsのカスタムポップアップ検証メッセージ

分類Dev

Catel Orchestra + MahApps.MetroでPleaseWaitポップアップを表示する

分類Dev

Mahapps.MetroTextBox-ClearTextButtonカスタムスタイル

分類Dev

Mahappsカスタムスタイルエラー

分類Dev

KeyUpイベントは「mahapps.metro」を使用して倍増しています

分類Dev

MahApps Metro SplitButtoniIconのサイズを変更する

分類Dev

WPF mahappsアイコン動的オブジェクトをボタンテンプレートスタイルにバインドする方法

分類Dev

フライアウトのグローバル スタイル - mahApps Metro

Related 関連記事

  1. 1

    Prism InteractionRequest + MahApps.Metro

  2. 2

    PRISM 5 + MahApps.Metro

  3. 3

    Mahapps.Metro:カスタムアイコンテキストボックス

  4. 4

    MahApps.Metro.Controls.Dialogを使用してメッセージボックスを作成する方法は?

  5. 5

    WPF MahApps.Metro AnimatedSingleRowTabControl FontSize

  6. 6

    Mahapps.MetroでWindowButtonCommandsスタイルを設定する

  7. 7

    MahApps.Metro Group ボックス ヘッダーにボタンを追加する

  8. 8

    MahApps.Metroカスタムダイアログを作成して表示する-ステップバイステップのハウツー

  9. 9

    Mahapps.Metroの既存のスタイルにカスタムスタイルを追加する

  10. 10

    Mahapps.Metroの既存のスタイルにカスタムスタイルを追加する

  11. 11

    MahApps.Metroを使用したWPFCheckComboBoxスタイリング

  12. 12

    Multiple view models with MahApps.Metro within TabControl

  13. 13

    MahApps.Metroダークテーマを適用する

  14. 14

    Mahappsカスタムタイトルバーの色

  15. 15

    Mahappsデータグリッド検証

  16. 16

    MahApps.MetroからShowInputAsyncにアクション付きのボタンを追加するにはどうすればよいですか?

  17. 17

    MahApps.MetroProgressリングの速度変更

  18. 18

    ElementhostでのMahapps.MetroFlyoutsの使用

  19. 19

    Caliburnを使用したMahApps.MetroMetroTabControl

  20. 20

    MahApps.Metroでタイトルバーにウィンドウアイコンを表示しますか?

  21. 21

    MahappsでShowInputAsyncダイアログの結果を取得する方法

  22. 22

    Mahappsのカスタムポップアップ検証メッセージ

  23. 23

    Catel Orchestra + MahApps.MetroでPleaseWaitポップアップを表示する

  24. 24

    Mahapps.MetroTextBox-ClearTextButtonカスタムスタイル

  25. 25

    Mahappsカスタムスタイルエラー

  26. 26

    KeyUpイベントは「mahapps.metro」を使用して倍増しています

  27. 27

    MahApps Metro SplitButtoniIconのサイズを変更する

  28. 28

    WPF mahappsアイコン動的オブジェクトをボタンテンプレートスタイルにバインドする方法

  29. 29

    フライアウトのグローバル スタイル - mahApps Metro

ホットタグ

アーカイブ