하나의 XAML 스타일에 대해 여러 TargetType을 정의할 수 있습니까?
HTML/CSS에서는 다음과 같은 다양한 유형의 요소에 적용할 수 있는 스타일을 정의할 수 있습니다.
.highlight {
color:red;
}
P와 DIV 모두에 적용할 수 있습니다. 예:
<p class="highlight">this will be highlighted</p>
<div class="highlight">this will also be highlighted</div>
그러나 XAML에서는 스타일에 대한 TargetType을 정의해야 할 것 같습니다.그렇지 않으면 다음 오류가 발생합니다.
<Style x:Key="formRowLabel" TargetType="TextBlock">
XAML 스타일을 여러 요소에 적용하거나 CSS와 같이 오픈 상태로 둘 수 있는 방법이 있습니까?
WPF 스타일의 세터는 컴파일 시 체크되며 CSS 스타일은 동적으로 적용됩니다.
WPF가 세터의 속성을 해당 유형의 종속 속성으로 해결할 수 있도록 유형을 지정해야 합니다.
대상 유형을 원하는 속성이 포함된 기본 클래스로 설정한 다음 파생 클래스에 해당 스타일을 적용할 수 있습니다.예를 들어 Control 객체에 대한 스타일을 만든 다음 여러 컨트롤 유형(버튼, 텍스트 상자, CheckBox 등)에 적용할 수 있습니다.
<Style x:Key="Highlight" TargetType="{x:Type Control}">
<Setter Property="Foreground" Value="Red"/>
</Style>
...
<Button Style="{StaticResource Highlight}" Content="Test"/>
<TextBox Style="{StaticResource Highlight}" Text="Test"/>
<CheckBox Style="{StaticResource Highlight}" Content="Test"/>
<!-- Header text style -->
<Style x:Key="headerTextStyle">
<Setter Property="Label.VerticalAlignment" Value="Center"></Setter>
<Setter Property="Label.FontFamily" Value="Trebuchet MS"></Setter>
<Setter Property="Label.FontWeight" Value="Bold"></Setter>
<Setter Property="Label.FontSize" Value="18"></Setter>
<Setter Property="Label.Foreground" Value="#0066cc"></Setter>
</Style>
<!-- Label style -->
<Style x:Key="labelStyle" TargetType="{x:Type Label}">
<Setter Property="VerticalAlignment" Value="Top" />
<Setter Property="HorizontalAlignment" Value="Left" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="Margin" Value="0,0,0,5" />
</Style>
이 두 가지 방법으로 스타일을 선언하는 것이 당신의 질문에 답할 수 있다고 생각합니다.첫 번째 항목에서는 TargetType이 지정되지 않았지만 속성 이름 앞에 'Label'이 붙습니다.두 번째 방법에서는 Label 객체에 대한 스타일이 작성됩니다.
또 다른 방법은 다음과 같습니다.
<UserControl.Resources>
<Style x:Key="commonStyle" TargetType="Control">
<Setter Property="FontSize" Value="24"/>
</Style>
<Style BasedOn="{StaticResource commonStyle}" TargetType="ListBox"/>
<Style BasedOn="{StaticResource commonStyle}" TargetType="ComboBox"/>
</UserControl.Resources>
텍스트 블록과 텍스트 상자에 스타일을 적용하고 싶었지만 텍스트 블록이 Control에서 상속되지 않기 때문에 선택한 답변이 작동하지 않았습니다. 내 경우 가시성 속성에 영향을 주고 싶었기 때문에 FrameworkElement를 사용했습니다.
<Style x:Key="ShowIfRequiredStyle" TargetType="{x:Type FrameworkElement}">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding ShowIfRequiredStyle, UpdateSourceTrigger=PropertyChanged}" Value="true">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
<TextBlock Style="{StaticResource ResourceKey=ShowIfRequiredStyle}"/>
<TextBox Style="{StaticResource ResourceKey=ShowIfRequiredStyle}"/>
두 항목 모두 Frameworkelement에서 상속되고 속성이 정의되므로 Visibility 속성에 대해 작동합니다.물론 이것은 Control에서 정의된 속성에서만 작동하지는 않습니다. 계층 트리를 검색하여 기본 클래스를 찾을 수 있습니다. 어쨌든 이것은 상위 검색 결과이고 선택한 답변이 약간 불완전하기 때문에 도움이 될 수 있다고 생각했습니다.
그 질문에는 다른 답이 있다.TargetType 매개 변수는 "Control"을 속성 이름에 접두사로 붙이는 경우에만 다양한 컨트롤에 적용할 수 있도록 스타일을 완전히 해제할 수 있습니다.
<Style x:Key="Highlight">
<Setter Property="Control.Foreground" Value="Red"/>
</Style>
이것은 베이스 컨트롤 클래스의 속성에만 유효합니다.아이템을 설정하려고 했을 경우소스가 말하길, 컨트롤이 없기 때문에 실패할 수 있다고 합니다.아이템 소스
난 이걸 할 거야
<Style x:Key="HeaderStyleThin" TargetType="{x:Type Border}">
<Setter Property="Background" Value="Black" />
<Style.Resources>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background=" Value="Red" />
</Style>
</Style.Resources>
</Style>
언급URL : https://stackoverflow.com/questions/802658/can-you-define-multiple-targettypes-for-one-xaml-style
'prosource' 카테고리의 다른 글
[클릭] 이벤트핸들러에서 버튼의 발신원 행을 가져옵니다. (0) | 2023.04.23 |
---|---|
Windows Azure 스토리지 인증서가 만료됨 (0) | 2023.04.23 |
Web Publish 비밀번호가 Azure 관리자 비밀번호와 동일하지 않습니까? (0) | 2023.04.23 |
이름이 붙은 파이프는 무엇입니까? (0) | 2023.04.23 |
색상에서 브러시로 변환하다 (0) | 2023.04.23 |