下記のUserControlのオブジェクトを動的にグリッドへ配置すると、MahAppsMetroのスタイルが反映されないようです。(WPFデフォルトのチェックボックス)
CheckBoxを直に配置するとMahAppsのスタイルになっています。
このことから、単に継承するとスタイルが失われてしまうと認識しています。
結論はあっていると思いますが、「動的」うんぬんは無関係でしょう(xamlで初めから置こうがコードで後から追加しようが、どちらも反映されません)
スタイルも継承?する必要があります。
Style.BasedOn プロパティ (System.Windows) | Microsoft Docs
xml
1<Style BasedOn="{StaticResource {x:Type CheckBox}}" TargetType="{x:Type local:MyCheckBox}" />
どこに置いてもいいでしょうが、すべてに適用するならApp.xaml
に置きます。
xml
1<Application
2 x:Class="Q0e3bd9vebiquet.App"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 xmlns:local="clr-namespace:Q0e3bd9vebiquet"
6 StartupUri="MainWindow.xaml">
7 <Application.Resources>
8 <ResourceDictionary>
9 <ResourceDictionary.MergedDictionaries>
10 <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Controls.xaml" />
11 <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Fonts.xaml" />
12 <ResourceDictionary Source="pack://application:,,,/MahApps.Metro;component/Styles/Themes/Light.Blue.xaml" />
13 </ResourceDictionary.MergedDictionaries>
14
15 <Style BasedOn="{StaticResource {x:Type CheckBox}}" TargetType="{x:Type local:MyCheckBox}" />
16 </ResourceDictionary>
17 </Application.Resources>
18</Application>
xml
1<mah:MetroWindow
2 x:Class="Q0e3bd9vebiquet.MainWindow"
3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5 xmlns:local="clr-namespace:Q0e3bd9vebiquet"
6 xmlns:mah="http://metro.mahapps.com/winfx/xaml/controls"
7 Width="400"
8 Height="200">
9 <StackPanel x:Name="stackPanel">
10 <CheckBox Content="CheckBox" IsChecked="True" />
11 <local:MyCheckBox Content="MyCheckBox" IsChecked="True" />
12 </StackPanel>
13</mah:MetroWindow>
cs
1using System.Windows.Controls;
2
3namespace Q0e3bd9vebiquet
4{
5 class MyCheckBox : CheckBox
6 {
7 public MyCheckBox() { }
8 public MyCheckBox(string s)
9 {
10 Content = s;
11 IsChecked = true;
12 }
13 }
14
15 public partial class MainWindow //: Window
16 {
17 public MainWindow()
18 {
19 InitializeComponent();
20
21 stackPanel.Children.Add(new CheckBox { Content = "add CheckBox", IsChecked = true, });
22 stackPanel.Children.Add(new MyCheckBox("add MyCheckBox"));
23 }
24 }
25}
UserControl
はすでに同名クラスがあるので避けたほうがいいでしょう。
UserControl クラス (System.Windows.Controls) | Microsoft Docs
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/03 05:46