内部のStyle
すべてにを適用したい場合の1つのオプションはこれですTextBlocks
MyUserControl
<Style TargetType="{x:Type my:MyUserControl}">
<Style.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Blue"/>
</Style>
</Style.Resources>
</Style>
Style
そして、あなたがあなたのために別のものを追加したいのであれば、MyUserControl
それをデフォルトに基づいて行う必要がありますStyle
<Style x:Key="myStyle" TargetType="{x:Type my:MyUserControl}"
BasedOn="{StaticResource {x:Type my:MyUserControl}}">
<!-- ... -->
</Style>
Style
それ以外の場合、 MyUserControl内の一部のコントロールにを設定できるようにする場合は、DependencyPropertiesを使用できます。たとえば、TextBlock
と呼ばれるスタイルを持つことができますTextBlockStyle
。はこれTextBlock
にバインドされ、ウィンドウから(または使用する場所ならどこでも)Style
設定できます。これは、フレームワークの一部のコントロール、たとえばツールキットでStyle
も確認できます。AutoCompleteBox
<toolkit:AutoCompleteBox>
<toolkit:AutoCompleteBox.TextBoxStyle>
<Style TargetType="TextBox">
<Setter Property="MaxLength" Value="10"/>
</Style>
</toolkit:AutoCompleteBox.TextBoxStyle>
</toolkit:AutoCompleteBox>
MyUserControl.xaml
<Border BorderThickness="1">
<TextBlock Style="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
Path=TextBlockStyle}"
Text="Test"/>
</Border>
MyUserControl.xaml.cs
public partial class MyUserControl : UserControl
{
public static DependencyProperty TextBlockStyleProperty =
DependencyProperty.Register("TextBlockStyle",
typeof(Style),
typeof(MyUserControl));
public MyUserControl()
{
InitializeComponent();
}
public Style TextBlockStyle
{
get { return (Style)GetValue(TextBlockStyleProperty); }
set { SetValue(TextBlockStyleProperty, value); }
}
}
次にStyle
、たとえばマークアップでインスタンスを宣言するタイミングを設定します
<my:MyUserControl>
<my:MyUserControl.TextBlockStyle>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Green"/>
</Style>
</my:MyUserControl.TextBlockStyle>
</my:MyUserControl>
アップデート
これをリソースレベルで設定するMyUserControl
には、ウィンドウリソースまたはApp.xamlなどにデフォルトのスタイルを追加します。
<Window.Resources>
<Style TargetType="{x:Type my:MyUserControl}">
<Setter Property="TextBlockStyle">
<Setter.Value>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Green"/>
</Style>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>