Label에 기본으로 정의된 스타일을 상속 받아오고 싶습니다.
사내 WPF 프로그램에 어떤 테마가 적용된 것 같습니다.
Button의 경우에는 Grid 바로 밑에 들어있는 형태로 Grid-Button 형태에 대해서만 스타일이 적용되도록 한 것 같습니다. Grid 안에 Button이 들어있더라도, 예를 들어, Grid-StackPanel-Button 순서로 들어있으면 스타일 적용이 안됩니다.
아래와 같은 경우에만 적용이 됩니다.
[되는 경우]
<Grid Grid.Row="1" Grid.ColumnSpan="3">
<Button x:Name="btnAddCostume" Content="코스튬 추가" />
<Button x:Name="btnDelCostume" Content="코스튬 삭제" />
</Grid>
[안되는 경우]
<Grid Grid.Row="1" Grid.ColumnSpan="3">
<StackPanel Orientation="Horizontal">
<Button x:Name="btnAddC…
WPF의 경우 BasedOn="{StaticResource {x:Type ControlName}
을 사용하면
범용으로 적용되던 스타일을 상속 받을 수 있었습니다.
MAUI는 StaticResource(string key )를 string으로 가져오기 때문에 x:Type
을 사용하면 에러가 나더라구요.
(WPF는 Object로 가져 옵니다)
using System;
using System.Collections.Generic;
using System.Reflection;
using Microsoft.Maui.Controls.Xaml.Internals;
namespace Microsoft.Maui.Controls.Xaml
{
[ContentProperty(nameof(Key))]
public sealed class StaticResourceExtension : IMarkupExtension
{
public string Key { get; set; }
public object ProvideValue(IServiceProvider serviceProvider)
{
if (serviceProvider is null)
throw new ArgumentNullException(nameof(serviceProvider));
if (Key is null)
throw new XamlParseException("you must specify a key in {StaticResource}", serviceProvider);
if (serviceProvider.GetService(typeof(IProvideValueTarget)) is not IProvideParentValues valueProvider)
throw new ArgumentException(null, nameof(serviceProvider));
This file has been truncated. show original
가이드 해주신 분에게 감사 인사 올립니다.
// x:Key 추가
<Style TargetType="Label"> => <Style x:Key="LabelStyle" TargetType="Label">
...
</Style>
// 범용 Label Style
<Style TargetType="Label" BasedOn="{StaticResource LabelStyle}"/>
<Style x:Key="CustomLabel" TargetType="Label" BasedOn="{StaticResource LabelStyle}">
...
</Style>
임시로 기본으로 적용 되던 Label에 x:key를 지정하고 상속 받아서
범용 Label Style를 정의했습니다.
1개의 좋아요
스타일에 Key
가 주어지지 않는 경우 키가 없는 것이 아니라 타입이 키가 됩니다. 예를 들어
의 경우 x:key="LabelStyle"
을 제거하고
BasedOn="{StaticResource Microsoft.Maui.Controls.Label}"
을 대신 사용할 수 있습니다.
3개의 좋아요
x:Type
대신 xxx:TypeName
을 하나 만들어서 사용할 수도 있겠네요.
3개의 좋아요
안녕하세요 @dimohy 님
좋은 의견 감사합니다.
BasedOn="{StaticResource Label}"
으로하면 오류가나서 안되는 줄 알았습니다.
(Microsoft.Maui.Controls.Label}")
Namespace를 정확히 지정 해주니 잘 돌아가네요 ^^
저의 경우 : Label Text에 FallbackValue가 적용이 안되고 Empty 값이 바인딩 되어서 나오네요.
( 새 프로젝트를 파서 실험할 때는 FallbackValue가 잘 적용이 되는데 차이점을 잘 모르겠네요.)
dimohy:
x:Type
대신 xxx:TypeName
이 부분은 이해가 잘 안 됩니다.
1개의 좋아요
직접 구현해서 쓰면… 좀 편하지 않을까 했습니다. ^^
2개의 좋아요