我目前正在处理具有白色文本和透明背景的用户控件。不幸的是因为VS2010中的XAML设计视图有白色背景我看不到任何我正在设计的内容!
我已经完成了我能想到的所有设置对话框,但无法找到更改XAML设计器背景颜色的设置。
有谁知道如何做到这一点?
答案 0 :(得分:25)
或者,从VS 2013开始,您可以在工具中执行此操作 - >选项 - >字体和颜色,XAML UI Designer。
可编辑的前景/背景颜色是棋盘背景的颜色。我只是将它们都设置为深灰色,这似乎适用于浅色和深色主题背景材料。
答案 1 :(得分:16)
在您的XAML中,将背景设置为黑色。然后在用户控件中,使用DesignerProperties在运行时设置背景:
<强> XAML 强>
<UserControl .... Background="Black" .... >
代码背后
public YourUserControl()
{
InitializeComponent();
if( !System.ComponentModel.DesignerProperties.GetIsInDesignMode( this ) )
{
this.Background = Brushes.Transparent;
}
}
<强>用户控件:强>
在您的用户控件中,不要声明背景颜色:
<UserControl ... namespaces ...>
UserControl代码落后:
在用户控件的构造函数中,使用上面的DesignTime方法,但检查它是否是设计模式(与其他方法相反):
public YourUserControl()
{
InitializeComponent();
if( System.ComponentModel.DesignerProperties.GetIsInDesignMode( this ) )
{
this.Background = Brushes.Black;
}
}
<强> App.xaml中:强>
最后,在App.xaml中,添加样式以设置UserControls的背景颜色:
<Application.Resources>
<Style TargetType="{x:Type UserControl}">
<Setter Property="Background" Value="Black" />
</Style>
</Application.Resources>
以下是发生的事情:
GetIsInDesignMode
检查将在使用UserControl的Window中查看控件时影响UserControl,因为VS正在设计时编译UserControl以便在可视设计器中呈现它。HTH的
答案 2 :(得分:4)
如this post所示,您可以使用触发器将代码压缩为单一样式,因为DesignerProperties.IsInDesignMode
是attached property。
实际上,那里的代码并不完全正确。它定义了TargetType="{x:Type UserControl}"
的隐式样式,无论如何都会在运行时被忽略,因为你的UserControl实际上是一个派生类 - 正如Metro Smurf在他的第一点指出的那样:
App.xaml会在设计时影响UserControl,因为a 类型样式自动应用于对象,但事实并非如此 应用于派生对象(在本例中为UserControl)。所以,在设计上 时间,VS认为应该应用样式,但在运行时,它会 忽略。
正确的做法是给它一个密钥并手动将其应用到UserControls:
<Application
...
xmlns:componentModel="clr-namespace:System.ComponentModel;assembly=PresentationFramework">
...
<Application.Resources>
...
<Style x:Key="DesignerBlackBackgroundStyle" TargetType="Control">
<Style.Triggers>
<Trigger Property="componentModel:DesignerProperties.IsInDesignMode"
Value="True">
<Setter Property="Background" Value="Black" />
</Trigger>
</Style.Triggers>
</Style>
和
<UserControl x:Class="MyUserControl"
Style="{StaticResource ResourceKey=DesignerBlackBackgroundStyle}">
作为一个触发器,这比在代码隐藏中设置背景有额外的好处 - 如果背景显式设置在其他地方,它将表现正常,例如来自包含UserControl:
<UserControl x:Class="ContainerUserControl" ...>
...
<local:MyUserControl Background="Gray" />
Local values have precedence over style triggers,所以在这个屏幕上,设计师会使用灰色背景,而在设计MyUserControl
时,它会是黑色的。
答案 3 :(得分:1)
你能用Blend进行设计吗? Blend可以选择在浅色和深色配色方案之间切换。
答案 4 :(得分:0)
在XAML中将usercontrol的背景颜色设置为黑色,然后在代码中将其设置为透明。
修改强> 如果您不习惯以这种方式离开代码,那么您可以在发布之前恢复此更改,一旦完成所有设计师的工作,尽管将其留在其中是没有害处的。