Style 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
형식의 인스턴스 간에 공유할 수 있는 속성 setter를 포함합니다. Style은 일반적으로 리소스 컬렉션에서 선언되므로 공유되고 컨트롤 템플릿 및 기타 스타일을 적용하는 데 사용할 수 있습니다.
UWP에 해당하는 WinUI 2 API: Microsoft.UI.Xaml.Style(Windows 앱 SDK WinUI의 경우 Windows 앱 SDK 네임스페이스 참조).
public ref class Style sealed : DependencyObject
/// [Windows.Foundation.Metadata.Activatable(Windows.UI.Xaml.IStyleFactory, 65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.Activatable(65536, Windows.Foundation.UniversalApiContract)]
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="Setters")]
class Style final : DependencyObject
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
/// [Windows.UI.Xaml.Markup.ContentProperty(Name="Setters")]
/// [Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
/// [Windows.Foundation.Metadata.Activatable(Windows.UI.Xaml.IStyleFactory, 65536, "Windows.Foundation.UniversalApiContract")]
class Style final : DependencyObject
[Windows.Foundation.Metadata.Activatable(typeof(Windows.UI.Xaml.IStyleFactory), 65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.Activatable(65536, typeof(Windows.Foundation.UniversalApiContract))]
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="Setters")]
public sealed class Style : DependencyObject
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
[Windows.UI.Xaml.Markup.ContentProperty(Name="Setters")]
[Windows.Foundation.Metadata.Activatable(65536, "Windows.Foundation.UniversalApiContract")]
[Windows.Foundation.Metadata.Activatable(typeof(Windows.UI.Xaml.IStyleFactory), 65536, "Windows.Foundation.UniversalApiContract")]
public sealed class Style : DependencyObject
Public NotInheritable Class Style
Inherits DependencyObject
<Style .../>
-or-
<Style ...>
oneOrMoreSetters
</Style>
- 상속
- 특성
Windows 요구 사항
| 디바이스 패밀리 |
Windows 10 (10.0.10240.0에서 도입되었습니다.)
|
| API contract |
Windows.Foundation.UniversalApiContract (v1.0에서 도입되었습니다.)
|
예제
이 예제에서는 두 가지 스타일을 만듭니다. 하나는 a TextBlock 스타일이고 다른 하나는 .에 대한 스타일입니다 TextBox. 각 스타일은 각각 TextBlock 에 대해 균일한 모양을 만들기 위해 컨트롤의 두 인스턴스에 적용됩니다 TextBox. 다음은 Style을 FrameworkElement.Style {StaticResource} 태그 확장으로 참조하여 각 컨트롤의 속성을 설정하는 예제입니다. 이 예제에서는 리소스 사전에서 스타일을 검색하고 코드의 컨트롤에 적용하는 방법도 보여 있습니다.
각 스타일에는 여러 Setter 부분이 있습니다. 이 XAML에서는 XAML 속성 요소가 나타나지 않습니다 Style.Setters . 이 속성에 대한 XAML의 일반적인 사용법입니다. 이 값은 Style.Setters Style의 XAML 콘텐츠 속성이므로 암시적입니다 Setters . XAML 구문 및 XAML 콘텐츠 구문을 통해 특정 XAML 요소를 암시하고 생략하는 방법에 대한 자세한 내용은 XAML 구문 가이드를 참조하세요.
스타일 TextBoxMargin 에서 속성은 4로 설정됩니다. 즉TextBox, 모든 면에서 여백이 4입니다. 성은 이름보다 공간이 적 기 때문에 첫 번째 TextBlock 보다 짧은 두 번째 TextBlock길이를 보정하기 위해 두 번째 TextBox속성에 "6,4,4,4"의 값이 할당됩니다.Margin 이렇게 하면 두 번째 TextBox 여백이 스타일이 지정한 것과 다른 여백을 가지므로 첫 번째 TextBox여백과 가로로 정렬됩니다.
<StackPanel x:Name="rootPanel">
<StackPanel.Resources>
<!--Create a Style for a TextBlock to specify that the
Foreground equals Navy, FontSize equals 14, and
VerticalAlignment equals Botton.-->
<Style TargetType="TextBlock" x:Key="TextBlockStyle">
<Setter Property="Foreground" Value="Navy"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="VerticalAlignment" Value="Bottom"/>
</Style>
<!--Create a Style for a TextBox that specifies that
the Width is 200, Height is 30, Margin is 4,
Background is LightBlue, and FontSize is 14.-->
<Style TargetType="TextBox" x:Key="TextBoxStyle">
<Setter Property="Width" Value="200"/>
<Setter Property="Height" Value="30"/>
<Setter Property="Margin" Value="4"/>
<Setter Property="FontSize" Value="14"/>
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
<GradientStop Color="White" Offset="0.0"/>
<GradientStop Color="LightBlue" Offset="0.5"/>
<GradientStop Color="Navy" Offset="1"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Resources>
<!--Apply the TextBlockStyle and TextBoxStyle to each
TextBlock and TextBox, respectively.-->
<StackPanel Orientation="Horizontal">
<TextBlock Text="First Name:" Style="{StaticResource TextBlockStyle}"/>
<TextBox Style="{StaticResource TextBoxStyle}"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Last Name:" Style="{StaticResource TextBlockStyle}"/>
<TextBox Style="{StaticResource TextBoxStyle}"
Margin="6,4,4,4"/>
</StackPanel>
<StackPanel x:Name="emailAddressPanel" Orientation="Horizontal"/>
</StackPanel>
private void ShowEmailAddressBox()
{
TextBlock emailAddressLabel = new TextBlock();
emailAddressLabel.Text = "Email:";
emailAddressLabel.Style = (Style)rootPanel.Resources["TextBlockStyle"];
TextBox emailAddressBox = new TextBox();
emailAddressBox.Style = (Style)rootPanel.Resources["TextBoxStyle"];
emailAddressBox.Margin = new Thickness(38, 4, 4, 4);
emailAddressPanel.Children.Add(emailAddressLabel);
emailAddressPanel.Children.Add(emailAddressBox);
}
이 예제에서는 두 가지 스타일 요소를 만듭니다. 첫 번째 스타일 요소의 TargetType이 TextBox로 설정되고 두 번째 스타일 요소의 TargetType이 Button으로 설정됩니다. 그런 다음 TextBox 컨트롤 및 단추 컨트롤에 대한 암시적 스타일로 적용됩니다.
<StackPanel>
<StackPanel.Resources>
<Style TargetType="TextBox">
<Setter Property="Foreground" Value="Pink" />
<Setter Property="FontSize" Value="15" />
</Style>
<Style TargetType="Button">
<Setter Property="Foreground" Value="Black" />
<Setter Property="Background" Value="Yellow" />
</Style>
</StackPanel.Resources>
<TextBox Height="30" Width="120" Margin="2" Text="TextBoxStyle" />
<Button Height="30" Width="100" Margin="2" Content="ButtonStyle" />
</StackPanel>
이 예제에서는 BaseStyle이라는 Style을 기반으로 하는 InheritedStyle이라는 스타일을 만듭니다. InheritedStyle은 BaseStyle에서 Yellow의 Background 값을 상속하고 포그라운드 값인 Red를 추가합니다.
<StackPanel>
<StackPanel.Resources>
<Style x:Key="BaseStyle" TargetType="Button">
<Setter Property="Background" Value="Yellow" />
</Style>
<!--Create a Style based on BaseStyle-->
<Style x:Key="InheritedStyle" TargetType="Button" BasedOn="{StaticResource BaseStyle}">
<Setter Property="Foreground" Value="Red" />
</Style>
</StackPanel.Resources>
<!--A button with default style-->
<Button Content="HelloWorld" />
<!--A button with base style-->
<Button Content="HelloWorld" Style="{StaticResource BaseStyle}" />
<!--A button with a style that is inherited from the BaseStyle-->
<Button Content="HelloWorld" Style="{StaticResource InheritedStyle}" />
</StackPanel>
설명
Style은 기본적으로 이러한 속성이 있는 특정 형식의 하나 이상의 인스턴스에 적용되는 속성 설정의 컬렉션입니다. Style에는 하나 이상의 Setter 개체 컬렉션이 포함되어 있습니다. 각각 Setter 에는 a와 a Property 가 있습니다 Value. 스타일 Property 이 적용되는 요소의 속성 이름입니다. 속성 Value 에 적용되는 값입니다.
Style을 적용하려면 대상 개체가 .이어야 DependencyObject합니다. 각 Setter 속성이 값으로 Property 참조하는 속성은 종속성 속성이어야 합니다.
Style을 TargetType 만들 때 속성을 설정해야 합니다. 그렇지 않으면 예외가 throw됩니다.
Style 및 요소에서 직접 동일한 속성에 대한 값을 설정하는 경우 요소에 설정된 값이 바로 우선합니다. 자세한 내용은 종속성 속성 개요, 특히 "종속성 속성 값 우선 순위" 섹션을 참조하세요.
스타일을 XAML 리소스로 정의
스타일은 거의 항상 XAML에서 리소스로 정의됩니다 ResourceDictionary.
- 동일한 XAML 페이지에 정의된 다른 UI 항목에서만 사용되는 Style의 경우 일반적으로 컬렉션에서 FrameworkElement.Resources Style을 정의합니다(
Page.Resources루트 요소가 Page있는 경우). - 앱에서 둘 이상의 페이지에서 사용되는 Style의 경우 일반적으로 컬렉션에서 Style을 Application.Resources 정의합니다. 또는 값으로 MergedDictionaries 포함하는 Application.Resources 앱에 대한 별도의 XAML 파일이 있을 수 있습니다.
- 대부분의 UI 요소에는 Windows 런타임 정의된 기본 스타일이 있습니다. 기본 스타일의 복사본은 generic.xaml이라는 디자인 도우미 XAML 파일에서 볼 수 있습니다. 이 파일은 기술적으로 앱용 리소스 파일이 아니지만 앱에 대한 리소스 파일은 아닙니다. 도구에서 사용하도록 설정된 대로 스타일 복사본을 편집할 때 이 파일의 불연속 부분을 앱의 XAML에 복사할 수 있지만, 이러한 복사본을 만들면 리소스 컬렉션 중 하나에 포함되거나 간접적으로 액세스 MergedDictionaries되어야 합니다. 이러한 모든 경우에 기본값을 재정의하는 수정된 XAML이 앱의 일부로 포함됩니다.
Windows 8 Windows 8 XAML에서 기존 컨트롤을 다시 템플릿하는 경우 대부분의 시작 앱 템플릿에 포함된 StandardStyles.xaml XAML 파일에 있는 Style 요소를 수정하는 경우가 있습니다. StandardStyles.xaml은 템플릿 app.xaml 파일에서 원본 파일로 MergedDictionaries 참조됩니다. Windows 8.1부터 시작하는 앱용 템플릿은 StandardStyles.xaml을 더 이상 사용하지 않습니다.
일반적으로 XAML 리소스가 되기 위한 요구 사항인 x:Key 특성 또는 x:Name 특성을 갖기 위해 스타일 정의 요소가 ResourceDictionary 필요하지 않습니다. 이러한 방식으로 정의된 스타일은 해당 TargetType 속성 값을 암시적 키로 사용하며 암시적 스타일이라고 합니다.
XAML 리소스 사전을 사용하는 방법에 대한 자세한 내용은 ResourceDictionary 및 XAML 리소스 참조를 참조하세요.
스타일 및 템플릿
Style에서 값을 모든 종속성 속성에 적용하는 데 사용할 Setter 수 있습니다. Setter 그러나 일반적인 Style에서 XAML 태그의 Control대부분을 구성하는 파생 클래스의 속성에 대한 Template 것입니다. Value for a Setter with Property="Template" 는 거의 항상 개체 요소를 포함하는 속성 요소로 ControlTemplate 지정됩니다.
Style을 사용하여 컨트롤 템플릿 TargetType 을 정의하는 경우 Style 요소와 TargetType 해당 Control.Template setter에 대한 요소의 ControlTemplate 값은 항상 동일한 값을 사용해야 합니다.
setter는 Template 해당 템플릿이 적용되는 컨트롤 인스턴스에 대한 기본 템플릿 UI 정의를 정의합니다. 컨트롤의 시각적 상태와 기본 테마 전환과 같은 기타 상태 기반 UI 정의도 포함됩니다. 같은 ListBox복잡한 컨트롤의 경우 기본 템플릿 스타일 및 ControlTemplate 내 컨트롤에는 수백 줄의 XAML이 있을 수 있습니다. 컨트롤 템플릿 시나리오에서 Style의 역할에 대한 자세한 내용은 XAML 컨트롤 템플릿을 참조하세요.
컨트롤의 템플릿에는 논리적 상태에 대한 응답으로 컨트롤의 모양을 변경하는 시각적 상태가 포함되어 있는 경우가 많습니다. 예를 들어 Button 템플릿에서 새 시각적 상태를 적용하여 누르면 시각적 모양이 다를 수 있으며 모든 모양 변경은 코드가 아닌 XAML에서 발생할 수 있습니다. 시각적 상태의 작동 방식 및 시각적 상태를 수정하거나 사용자 지정 컨트롤의 상태를 정의하는 방법에 대한 자세한 내용은 시각적 상태 및 XAML 컨트롤 템플릿에 대한 스토리보드 애니메이션을 참조하세요.
스타일 및 런타임 동작
런타임에 Style에 의해 설정된 개별 속성의 값을 변경하고 새 값이 값을 덮어쓸 Setters 수 있습니다. 예를 들어 이 속성이 스타일에 Template 의해 설정된 경우에도 런타임에 속성을 설정할 수 있습니다.
런타임에 Style의 속성을 조정할 수 있지만 해당 스타일이 아무 것도 적용되지 않고 암시적으로 사용되지 않는 리소스로만 존재하는 경우에만 가능합니다. 예를 들어 x:Key 특성으로 존재 Resources 하지만 해당 스타일을 참조하는 XAML의 다른 위치에 {StaticResource} 태그 확장 값이 없는 스타일에 대해 컬렉션 Setters 에 setter를 추가할 수 있습니다. 그러나 스타일이 참조되고 로드된 개체의 값에 사용되는 즉시 Style은 봉인된 것으로 간주되어야 합니다. Style에 대한 속성 값을 IsSealed 확인하여 봉인된 상태를 검색할 수 있습니다. true 이면 스타일이 봉인되고 해당 스타일 또는 Setter 하위 값의 속성을 수정할 수 없습니다. 스타일이 사용되고 봉인된 시점은 Style이 참조되는 개체가 해당 이벤트를 발생할 때 검색할 수도 있습니다 Loaded .
BasedOn 스타일
앱에서 정의한 기존 스타일 또는 Windows 런타임 컨트롤의 기본 스타일에 따라 새 스타일을 빌드할 수 있습니다. 속성을 사용하여 BasedOn 이 작업을 수행할 수 있습니다. 이렇게 하면 XAML의 중복이 줄어들고 리소스를 더 쉽게 관리할 수 있습니다. 각 스타일은 하나의 BasedOn 스타일만 지원합니다. 자세한 내용은 컨트롤을 참조 BasedOn 하거나 스타일을 지정합니다.
암시적 스타일
이러한 개체의 각 인스턴스에서 Style을 값으로 FrameworkElement.Style 구체적으로 참조할 필요 없이 스타일이 동일한 TargetType모든 개체에서 암시적으로 사용되도록 스타일을 정의할 수 있습니다. 리소스가 <Style> x:Key 특성 없이 선언된 ResourceDictionary 경우 x:Key 값은 속성 값을 TargetType 사용합니다. 스타일을 암시적으로 설정하는 경우 스타일은 값에서 TargetType 파생된 요소가 아니라 정확히 일치하는 TargetType 형식에만 적용됩니다. 예를 들어 애플리케이션의 모든 ToggleButton 컨트롤에 대해 암시적으로 스타일을 만들고 애플리케이션 ToggleButton 에 컨트롤(CheckBoxCheckBox파생ToggleButton)이 있는 경우 "ToggleButton" 암시적 스타일은 컨트롤에 ToggleButton 만 적용됩니다.
XAML 구문에 대한 참고 사항
Setters 는 Style의 XAML 콘텐츠 속성이므로 .와 같은 <Style><Setter .../><Setter .../></Style>암시적 컬렉션 구문을 사용할 수 있습니다.
코드에서 Style 클래스를 사용하는 경우(예: 생성자 호출 및 하나씩 값 작성 Setter ) 매우 드뭅니다. 스타일은 템플릿에 사용되고 템플릿은 XAML 로드 시간에 사용할 수 있어야 하므로 코드에서 만든 모든 스타일은 일반적으로 너무 늦게 UI의 컨트롤에 적용할 수 없습니다.
생성자
| Style() |
초기 TargetType 및 빈 Setters 컬렉션 없이 클래스의 Style 새 인스턴스를 초기화합니다. |
| Style(TypeName) |
지정된 초기 TargetType 및 빈 Setters 컬렉션을 사용하여 클래스의 Style 새 인스턴스를 초기화합니다. |
속성
| BasedOn |
현재 스타일의 기준이 되는 정의된 스타일을 가져오거나 설정합니다. UWP에 해당하는 WinUI 2 API: Microsoft.UI.Xaml.Style.BasedOn(Windows 앱 SDK WinUI의 경우 Windows 앱 SDK 네임스페이스 참조). |
| Dispatcher |
이 개체가 CoreDispatcher 연결된 개체를 가져옵니다. 코드 CoreDispatcher 가 비 UI 스레드에서 시작되는 경우에도 UI 스레드에 액세스할 DependencyObject 수 있는 기능을 나타냅니다. UWP에 해당하는 WinUI 2 API: Microsoft.UI.Xaml.DependencyObject.Dispatcher(Windows 앱 SDK WinUI의 경우 Windows 앱 SDK 네임스페이스 참조). (다음에서 상속됨 DependencyObject) |
| IsSealed |
이 스타일이 읽기 전용이고 변경될 수 없는지 여부를 나타내는 값을 가져옵니다. UWP에 해당하는 WinUI 2 API: Microsoft.UI.Xaml.Style.IsSealed(Windows 앱 SDK WinUI의 경우 Windows 앱 SDK 네임스페이스 참조). |
| Setters |
Setter 개체의 컬렉션입니다. UWP용 동등한 WinUI 2 API: Microsoft.UI.Xaml.Style.Setters(Windows 앱 SDK WinUI의 경우 Windows 앱 SDK 네임스페이스 참조). |
| TargetType |
스타일이 의도된 형식을 가져오거나 설정합니다. 지정된 리소스 키가 없는 경우 TargetType을 사용하여 암시적 스타일 리소스를 선언할 수 있습니다. UWP에 해당하는 WinUI 2 API: Microsoft.UI.Xaml.Style.TargetType(Windows 앱 SDK WinUI의 경우 Windows 앱 SDK 네임스페이스 참조). |
메서드
적용 대상
추가 정보
피드백
다음에 대한 사용자 의견 제출 및 보기