ウィンドウとダイアログへのスタイルの適用 |
前のトピックでは、標準の Microsoft Ribbon コントロールにテーマを適用する方法を示しました。このトピックではさらに進んで、単純なクリックでダイアログとして使用される Window クラスに対してテーマのようなスタイルを適用する方法を示します。
Microsoft Ribbon コントロールへテーマを適用する方法については、C1Themes コンポーネントのサンプルとして提供されている「RibbonThemes」で紹介しております。 以下の例は、「RibbonThemes」サンプルにおいて、検索および置換ダイアログとして使用するウィンドウ(FindReplaceDialog.xaml)を追加し、メインウィンドウと同様のテーマを適用するために行った手順を示します。
スタイルを更新するために、ApplyTheme() メソッド内に以下のコードを追加します。
root.Style = TryFindResource(new ComponentResourceKey(typeof(Ribbon), "RibbonWindowStyle")) as Style; if (theme != null) { this.Resources.MergedDictionaries.Add(C1Theme.GetCurrentThemeResources(theme)); var adornerLayer = AdornerLayer.GetAdornerLayer(LayoutRoot); if (adornerLayer != null) { // これは、任意の C1 ウィンドウインスタンスを含む adorner に表示されるすべてのテーマに適用されます。 C1Theme.ApplyTheme(adornerLayer, theme); } } // 以下に示すように、テーマリソース辞書をアプリケーションリソースに追加して、他のウィンドウにアクセスできるようにします。 Application.Current.Resources.MergedDictionaries.Clear(); Application.Current.Resources.MergedDictionaries.Add(theme.GetNewResourceDictionary()); Application.Current.Resources.MergedDictionaries.Add(ribbonTheme.GetNewResourceDictionary());
コードのイベントハンドラセクションにて、find_Click() および replace_Click() イベントハンドラを追加します。
private void find_Click(object sender, RoutedEventArgs e) { FindReplaceDialog frd = new FindReplaceDialog(); // ウィンドウスタイルを割り当てます frd.Style = TryFindResource(typeof(Window)) as Style; frd.ShowDialog(); } private void replace_Click(object sender, RoutedEventArgs e) { FindReplaceDialog frd = new FindReplaceDialog(1); // ウィンドウスタイルを割り当てます frd.Style = TryFindResource(typeof(Window)) as Style; frd.ShowDialog(); }
XAML ウィンドウ(FindReplaceDialog.xaml)を、プロジェクトに追加します。
FindReplaceDialog.xaml ファイル内に以下のコードを追加します。
<Window x:Class="RibbonThemes.FindReplaceDialog" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Find and Replace" MinHeight="242" MinWidth="480" Width="480" Height="242" WindowStartupLocation="CenterScreen" Topmost="True" xmlns:shell="clr-namespace:System.Windows.Shell;assembly=PresentationFramework" xmlns:ribbon="clr-namespace:System.Windows.Controls.Ribbon;assembly=System.Windows.Controls.Ribbon"> <Grid VerticalAlignment="Stretch"> <TabControl Name="_tab" SelectionChanged="_tab_SelectionChanged" VerticalAlignment="Stretch" > <TabItem Header="Find" /> <TabItem Header="Replace" /> </TabControl> <DockPanel Margin="0,24,0,0"> <Grid DockPanel.Dock="Top" Margin="5,5,5,0" > <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="100"/> <ColumnDefinition /> </Grid.ColumnDefinitions> <Label Content="Find what:" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center"/> <ComboBox IsEditable="True" Grid.Row="0" Grid.Column="1" Margin="5"/> <Label Name="_lbReplace" Content="Replace with:" Grid.Row="1" Grid.Column="0" VerticalAlignment="Center"/> <ComboBox Name="_comboReplace" IsEditable="True" Grid.Row="1" Grid.Column="1" Margin="5"/> </Grid> <StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" Margin="5,0,5,0" HorizontalAlignment="Right" > <Button Name="_btnReplaceAll" Content="Replace All" Width="75" Height="25" Margin="5"/> <Button Name="_btnReplace" Content="Replace" Width="75" Height="25" Margin="5"/> <Button Content="Find All" Width="75" Height="25" Margin="20,5,5,5"/> <Button Content="Find Next" Width="75" Height="25" Margin="5" /> <Button Name="_btnClose" Content="Close" Width="75" Height="25" Margin="20,5,0,5" Click="_btnClose_Click"/> </StackPanel> <Grid Margin="5,5,5,0" > <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="Auto" /> <RowDefinition /> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition Width="Auto"/> <ColumnDefinition /> <ColumnDefinition /> </Grid.ColumnDefinitions> <Label Content="Within:" Grid.Row="0" Grid.Column="0" VerticalAlignment="Center"/> <ComboBox Width="90" Grid.Row="0" Grid.Column="1" Margin="5"> <ComboBoxItem Content="Sheet" IsSelected="True"/> <ComboBoxItem Content="Workbook"/> </ComboBox> <CheckBox Grid.Row="0" Grid.Column="2" Content="Match case" VerticalAlignment="Center"/> <Label Content="Search:" Grid.Row="1" Grid.Column="0" VerticalAlignment="Center"/> <ComboBox Width="90" Grid.Row="1" Grid.Column="1" Margin="5"> <ComboBoxItem Content="By Rows" IsSelected="True"/> <ComboBoxItem Content="By Columns"/> </ComboBox> <CheckBox Grid.Row="1" Grid.Column="2" Content="Match entire cell contents" VerticalAlignment="Center"/> </Grid> </DockPanel> </Grid> </Window>
FindReplaceDialog.xaml.cs 内に、FindReplaceDialog.xaml の対話ロジックを以下のように追加します。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; namespace RibbonThemes { /// <summary> /// Interaction logic for FindReplaceDialog.xaml /// </summary> public partial class FindReplaceDialog : Window { public FindReplaceDialog() { InitializeComponent(); InitializeCommandBindings(); } public FindReplaceDialog(int index) { InitializeComponent(); InitializeCommandBindings(); _tab.SelectedIndex = index; } #region Events handler private void _tab_SelectionChanged(object sender, SelectionChangedEventArgs e) { var tabControl = sender as TabControl; if (tabControl != null) { if (tabControl.SelectedIndex != 0) { _btnReplace.Visibility = Visibility.Visible; _btnReplaceAll.Visibility = Visibility.Visible; _lbReplace.Visibility = Visibility.Visible; _comboReplace.Visibility = Visibility.Visible; } else { _btnReplace.Visibility = Visibility.Hidden; _btnReplaceAll.Visibility = Visibility.Hidden; _lbReplace.Visibility = Visibility.Hidden; _comboReplace.Visibility = Visibility.Hidden; } } } private void _btnClose_Click(object sender, RoutedEventArgs e) { Close(); }
サンプルを実行し、リボンツールバーのファイルと選択ドロップダウンメニューの下に表示されている検索または置換オプションをクリックします。 検索と置換ダイアログは、メインウィンドウに適用されたテーマと同様のスタイルで表示されます。