XAML编辑器的黑色背景

时间:2011-03-03 16:49:20

标签: wpf silverlight visual-studio-2010

我目前正在处理具有白色文本和透明背景的用户控件。不幸的是因为VS2010中的XAML设计视图有白色背景我看不到任何我正在设计的内容!

我已经完成了我能想到的所有设置对话框,但无法找到更改XAML设计器背景颜色的设置。

有谁知道如何做到这一点?

5 个答案:

答案 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>

以下是发生的事情:

  1. App.xaml将在设计时影响UserControl,因为类型样式会自动应用于对象,但 >应用于派生对象(在本例中为UserControl)。因此,在设计时,VS认为它应该应用样式,但在运行时,它将被忽略。
  2. GetIsInDesignMode检查将在使用UserControl的Window中查看控件时影响UserControl,因为VS正在设计时编译UserControl以便在可视设计器中呈现它。
  3. HTH的

答案 2 :(得分:4)

this post所示,您可以使用触发器将代码压缩为单一样式,因为DesignerProperties.IsInDesignModeattached 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的背景颜色设置为黑色,然后在代码中将其设置为透明。

修改 如果您不习惯以这种方式离开代码,那么您可以在发布之前恢复此更改,一旦完成所有设计师的工作,尽管将其留在其中是没有害处的。