source

WPF의 디자인 타임 전용 배경색?

lovecheck 2023. 4. 22. 09:43
반응형

WPF의 디자인 타임 전용 배경색?

WPF XAML에는 편리한 기능이 있습니다.DesignHeight그리고.DesignWidth(예를 들어 코드명:

<UserControl ... d:DesignHeight="500" d:DesignWidth="500" ... />

레이아웃을 대표적인 컨트롤 크기로 만들 수 있기 때문에 매우 좋습니다.

단, 레이블 등은 흰색이어야 하지만 컨트롤은 여전히 투명한 배경색을 필요로 하는 어두운 UI를 작성하는 경우가 많습니다.따라서 설계자의 투명 컨트롤의 기본 배경색이 흰색인 것처럼 보여 판독할 수 없는 흰색 레이블이 생기기 때문에 디자인 타임에 불편이 생깁니다.

디자인에서와 마찬가지로 편리한 디자인 타임 배경색을 설정하는 방법 또는 전략이 있습니까?높이/설계 폭

기록되지 않은 자산이 있습니다.d:DesignStyle타입의Style사용자 컨트롤로 설정할 수 있습니다.이 스타일은 디자이너에만 적용되며 런타임에는 사용되지 않습니다.

다음과 같이 사용합니다.

<UserControl ... d:DesignStyle="{StaticResource MyDesignStyle}" />

또는 다음과 같이 합니다.

<UserControl ...>
    <d:DesignerProperties.DesignStyle>
        <Style TargetType="UserControl">
            <Setter Property="Background" Value="White" />
            <Setter Property="Height" Value="500" />
            <Setter Property="Width" Value="500" />
        </Style>
    </d:DesignerProperties.DesignStyle>
</UserControl>

Background당신이 요구한 게 바로 재산이에요Height그리고.Width를 교환해 주세요d:DesignHeight=500그리고.d:DesignWidth=500에서<UserControl>태그. 그러면 모든 디자인 속성을 한 곳에 저장할 수 있습니다.

단, 에 설정된 값은Style속성(실행시에 사용되는 속성)은 또한DesignStyle디자이너에 있습니다.

네가 직접 할 수 있다는 걸 알았어.SilverlightWPF 디자이너의 커스텀 디자인 타임 속성은 Silverlight와 WPF 모두에 대해 이를 수행하는 방법에 대한 튜토리얼입니다.

XAML Editor의 Black Background에 대한 답변은 다음과 같습니다.체크 등 여러 가지 선택지가 있습니다.System.ComponentModel.DesignerProperties.GetIsInDesignMode(this)실행 시.

다음은 DesignBackground의 완전한 솔루션입니다.

public class DesignTimeProperties : DependencyObject
    {
        private static readonly Type OwnerType = typeof(DesignTimeProperties);

        #region DesignBackground (attached property)

        public static Brush GetDesignBackground(DependencyObject obj)
        {
            return (Brush)obj.GetValue(DesignBackgroundProperty);
        }

        public static void SetDesignBackground(DependencyObject obj, Brush value)
        {
            obj.SetValue(DesignBackgroundProperty, value);
        }

        public static readonly DependencyProperty DesignBackgroundProperty =
            DependencyProperty.RegisterAttached(
                "DesignBackground",
                typeof (Brush),
                OwnerType,
                new FrameworkPropertyMetadata(Brushes.Transparent,
                    DesignBackgroundChangedCallback));

        public static void DesignBackgroundChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            if (IsInDesignMode)
            {
                var control = d as Control;
                var brush = e.NewValue as Brush;
                if (control != null && brush != null)
                {
                    control.Background = brush;
                }
            }
        }

        public static bool IsInDesignMode
        {
            get
            {
                return
                    ((bool)
                        DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof (DependencyObject)).DefaultValue);
            }
        }

        #endregion

    }

사용방법:

<UserControl ... infra:DesignTimeProperties.DesignBackground="Black" />

d:DesignerProperties.DesignStyle이 페이지에 표시된 기술은 WPF 디자인 타임 전용 스타일을 단일 컨트롤에 적용하는 데 매우 효과적이지만, WPF는 이 컨트롤에 대해서는 효과가 없는 것 같습니다.Style에 있어서ResourceDictionary사전의 적용범위에 따라 적절히 조정된 모든 제어 또는 요소에 적용될 수 있습니다.아래는 디자이너 전용 스타일을 도입하기 위해 찾은 간단한 솔루션입니다.ResourceDictionary.

예를 들어 a를 생각해 봅시다.Window포함TreeView델이 필요로 하는 곳TreeViewItem노드를 완전히 확장한 것으로 표시합니다.단, 설계 시에만 표시됩니다.먼저 XAML 사전에 원하는 스타일을 일반 방식으로 넣습니다.

<Window.Resources>
    <Style TargetType="TreeViewItem">
        <Setter Property="IsExpanded" Value="True" />
    </Style>
</Window.Resources>

여기, 그Style에 배치되어 있습니다.ResourceDictionaryWindow물론 다른 가정사전을 대신 사용할 수도 있습니다.다음으로 C# 코드에서 설계 모드가 검출되지 않을 때 스타일을 삭제합니다.이 동작은OnInitialized★★★★★★★★★★★★★★★★★★:

protected override void OnInitialized(EventArgs e)
{
    if (DesignerProperties.GetIsInDesignMode(this) == false)
        Resources.Remove(typeof(TreeViewItem));

    base.OnInitialized(e);
}

설계 모드: 런타임 모드:

설계 모드    런타임 모드

언급URL : https://stackoverflow.com/questions/9076419/design-time-only-background-color-in-wpf

반응형