颜色在Windows Server中的WPF应用程序错误2012

问题描述:

下面的代码创建了当你把鼠标移动到物品得到橙色listboxitems一个窗口:颜色在Windows Server中的WPF应用程序错误2012

<Window x:Class="Orange.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > 

    <Window.Resources> 
     <Style TargetType="ListBoxItem"> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="Background" Value="Orange" /> 
       </Trigger> 
       </Style.Triggers> 
      </Style> 
    </Window.Resources> 

    <ListBox> 
     <ListBoxItem> aaaa </ListBoxItem> 
     <ListBoxItem> aaaa </ListBoxItem> 
     <ListBoxItem> aaaa </ListBoxItem> 
    </ListBox> 
</Window> 

如果你执行它在任何操作系统但Windows 2012它工作正常。在Windows 2012 Server上,背景显示为白色。

enter image description here

任何想法?

+0

好吧,这很奇怪。如果你尝试像F90那样的颜色的直接十六进制值? –

我使用的是Windows 10(1511版),它不适用于我的系统。

我用VS 2015的文档大纲来创建一个ListBoxItem模板。我修改了它的橙色背景,它在Win10上工作(并且,我假设Server 2012)。

<Window x:Class="WpfApplication20.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" > 
    <Window.Resources> 
     <Style TargetType="ListBoxItem"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
         <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True"> 
          <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
         </Border> 
         <ControlTemplate.Triggers> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="IsMouseOver" Value="True"/> 
           </MultiTrigger.Conditions> 
           <Setter Property="Background" TargetName="Bd" Value="Orange"/> 
           <Setter Property="BorderBrush" TargetName="Bd" Value="#A826A0DA"/> 
          </MultiTrigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="Selector.IsSelectionActive" Value="False"/> 
            <Condition Property="IsSelected" Value="True"/> 
           </MultiTrigger.Conditions> 
           <Setter Property="Background" TargetName="Bd" Value="#3DDADADA"/> 
           <Setter Property="BorderBrush" TargetName="Bd" Value="#FFDADADA"/> 
          </MultiTrigger> 
          <MultiTrigger> 
           <MultiTrigger.Conditions> 
            <Condition Property="Selector.IsSelectionActive" Value="True"/> 
            <Condition Property="IsSelected" Value="True"/> 
           </MultiTrigger.Conditions> 
           <Setter Property="Background" TargetName="Bd" Value="#3D26A0DA"/> 
           <Setter Property="BorderBrush" TargetName="Bd" Value="#FF26A0DA"/> 
          </MultiTrigger> 
          <Trigger Property="IsEnabled" Value="False"> 
           <Setter Property="TextElement.Foreground" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 
    <ListBox> 
     <ListBoxItem>aaaa</ListBoxItem> 
     <ListBoxItem>aaaa</ListBoxItem> 
     <ListBoxItem>aaaa</ListBoxItem> 
    </ListBox> 
</Window> 

看看IsMouseOver是如何触发的,它将边界背景设置为硬编码值?这就是为什么你的风格不起作用......背景可能正在改变,但边界不使用它!使用Snoop,我发现ListBoxItem的背景确实变成了橙色,但正如我所说的,背景使用了模板触发器中的颜色。

您可能需要做的是创建一个样式,然后将其他样式基于它。我在我的Win7虚拟机上使用VS 2013来创建一个基本模板,该模板应该接近您现有的样式所期望的。在App.xaml中把这个:

<Style TargetType="ListBoxItem"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ListBoxItem}"> 
       <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="True"> 
        <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}" ContentStringFormat="{TemplateBinding ContentStringFormat}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
        </Trigger> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsSelected" Value="True"/> 
          <Condition Property="Selector.IsSelectionActive" Value="False"/> 
         </MultiTrigger.Conditions> 
         <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}}"/> 
        </MultiTrigger> 
        <Trigger Property="IsEnabled" Value="False"> 
         <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

,然后改变你的风格是基于关闭它,就像这样:

<Style TargetType="ListBoxItem" BasedOn="{StaticResource {x:Type ListBoxItem}}"> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background" Value="Orange" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

希望它可以帮助...可能不理想,但它应该工作。

+0

很高兴知道。我还没有尝试过使用Windows 10.无论如何,我希望我能找到一个不涉及更改代码的解决方案。我们有很多自定义样式,因为应用程序旨在提供丰富的用户体验。 –

+0

嗯,听起来像是一个bug。你认为我应该在M $填写一个吗? –

+0

你可以但我认为这个问题从Windows 8开始,所以我很确定他们知道。你在Windows 8上试过了吗? Server 2012基于Win 8,所以我认为这是行不通的。 –