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
디자이너에 있습니다.
네가 직접 할 수 있다는 걸 알았어.Silverlight 및 WPF 디자이너의 커스텀 디자인 타임 속성은 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
에 배치되어 있습니다.ResourceDictionary
의Window
물론 다른 가정사전을 대신 사용할 수도 있습니다.다음으로 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
'source' 카테고리의 다른 글
T-SQL에서의 PRINT 문 (0) | 2023.04.22 |
---|---|
Azure 함수에서 설정 읽기 (0) | 2023.04.22 |
Swift에서 viewController 인스턴스화 및 표시 (0) | 2023.04.22 |
- SelectRowAtIndexPath: 호출되지 않음 (0) | 2023.04.22 |
원래 GitHub 저장소에서 분기된 GitHub 저장소로 새 업데이트를 가져옵니다. (0) | 2023.04.22 |