我正在使用Visual Studio暗黑主题。因此,在设计我的视图时,如果字体是黑色,则无法看到它们。解决方法是将视图的背景设置为白色。但是我们的应用程序有不同的主题,所以我不能硬编码这个。
创建用户控件时我使用了两个很棒的属性:
d:DesignWidth="1110" d:DesignHeight="400"
那些属性只在设计时影响视图。如果我能创建一个属性 d:DesignBackground
,那就太好了,这样每次运行应用程序时就不必再添加和删除背景属性了。
我正在使用Visual Studio暗黑主题。因此,在设计我的视图时,如果字体是黑色,则无法看到它们。解决方法是将视图的背景设置为白色。但是我们的应用程序有不同的主题,所以我不能硬编码这个。
创建用户控件时我使用了两个很棒的属性:
d:DesignWidth="1110" d:DesignHeight="400"
那些属性只在设计时影响视图。如果我能创建一个属性 d:DesignBackground
,那就太好了,这样每次运行应用程序时就不必再添加和删除背景属性了。
我不确定这是否完全符合您的要求,但我所做的就是在app.xaml中插入一个触发器来使用IsInDesignMode
属性进行调用,例如:
命名空间(感谢Tono Nam);
xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=PresentationFramework"
XAML;
<Style TargetType="{x:Type UserControl}">
<Style.Triggers>
<Trigger Property="ComponentModel:DesignerProperties.IsInDesignMode"
Value="True">
<Setter Property="Background"
Value="#FFFFFF" />
</Trigger>
</Style.Triggers>
</Style>
简单有效,有时候我也会根据需要瞄准其他依赖属性,比如字体等。希望这可以帮到你。
补充一下 - 你也可以用同样的方法针对其他TargetType和它们自己的属性,比如ChildWindows、Popups、Windows,等等...
xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=PresentationFramework"
。 - Tono Namusing System;
using System.ComponentModel;
using System.Diagnostics;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace Helpers.Wpf
{
public static class DesignModeHelper
{
private static bool? inDesignMode;
public static readonly DependencyProperty BackgroundProperty = DependencyProperty
.RegisterAttached("Background", typeof (Brush), typeof (DesignModeHelper), new PropertyMetadata(BackgroundChanged));
private static bool InDesignMode
{
get
{
if (inDesignMode == null)
{
var prop = DesignerProperties.IsInDesignModeProperty;
inDesignMode = (bool) DependencyPropertyDescriptor
.FromProperty(prop, typeof (FrameworkElement))
.Metadata.DefaultValue;
if (!inDesignMode.GetValueOrDefault(false) && Process.GetCurrentProcess().ProcessName.StartsWith("devenv", StringComparison.Ordinal))
inDesignMode = true;
}
return inDesignMode.GetValueOrDefault(false);
}
}
public static Brush GetBackground(DependencyObject dependencyObject)
{
return (Brush) dependencyObject.GetValue(BackgroundProperty);
}
public static void SetBackground(DependencyObject dependencyObject, Brush value)
{
dependencyObject.SetValue(BackgroundProperty, value);
}
private static void BackgroundChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (!InDesignMode)
return;
d.SetValue(Control.BackgroundProperty, e.NewValue);
}
}
}
您可以像这样使用它:
xmlns:wpf="clr-namespace:Helpers.Wpf;assembly=Helpers.Wpf"
<Grid Background="Black"
wpf:DesignModeHelper.Background="White">
<Button Content="Press me!"/>
</Grid>
在2022年,你实际上可以做到并且几乎猜到了:
d:Background="White"
请注意,您可以在控件属性前加上d:
来为设计时设置其他控件属性,例如:
<TextBlock Text="{Binding TextFromViewModel}"
Foreground="{StaticResource PrimaryBrush}"
d:Text="Design-time text"
d:Foreground="Black" />
Foreground
是由DynamicResource
设置的吗? - fahimalizain