2012-05-30 37 views
4

我正在基於MS RibbonControlsLibrary(3.5.41019.1)以編程方式填充功能區(WPF)。所有圖像(最引人注目的大型圖片)看起來很糟糕, 「pixly」:圖像縮放在功能區看起來不好

Screenshot from 2 Ribbon

  • 上面的截圖是從 「pixly」 絲帶(圖像縮放看壞)
  • 底部的屏幕截圖取自相同區域的基於WinForms的窗口中的相同源圖像(圖像縮放看起來不錯)
  • 所有圖像保存在32位PNG 48x48的

我試圖設置BitmapScalingMode以 「高品質」 無任何影響,源代碼:

BitmapImage img = new BitmapImage(); 
try 
{ 
    Uri uri = new Uri("pack://application:,,,/UIMainWindow;component/Resources/" + iPictureName);     
    img.BeginInit(); 
    img.SetValue(BitmapImage.CacheOptionProperty, BitmapCacheOption.OnLoad); 
    RenderOptions.SetBitmapScalingMode(img, BitmapScalingMode.HighQuality); 
    img.UriSource = uri; 
    img.EndInit(); 
    img.Freeze(); 
} 
catch (Exception ex) 
{ 
    throw new Exception("Creation of image failed: " + ex.Message, ex); 
} 

問題 爲什麼是看起來不好的圖像的縮放比例?我該如何解決這個問題?

回答

0

嘗試使用vector graphics。有許多工具可以用來生成這種類型的圖像的xaml,你可以看看這個article它可能會有所幫助。

+1

可能是一個可能的解決方案,但WPF支持PNG:s,而且您不需要將它們轉換爲矢量圖形以便能夠在功能區中使用它們。 – vanos

+0

@vanos你的好友WPF支持PNG。但問題是PNG能夠縮小或擴大而不會像素化?如果您在資源字典中使用矢量圖形作爲XAML,則您甚至可以在不需要縮放的情況下重複使用這些圖像,而每次需要更小或更大的副本。 –

+0

我希望WPF能夠正確調整PNG的大小,因爲使用WinForms這是沒有問題的。在我的項目中,我有> 100個圖像,所以我最後的選擇是以某種方式操縱它們。 – vanos

0

您使用的是什麼操作系統? WPF在XP中看起來不太好(Vista和7沒有問題)。 我相信這是由於XP和較新的操作系統之間抗鋸齒的默認值有所不同。

將XAML中的寬度和高度設置爲48以匹配圖像大小(同時檢查拉伸參數)。

隨着48x48 32位PNG圖像應該看起來不錯。

由於色帶條未拉伸,矢量圖形是多餘的。

如果以上方法無效,請嘗試設置align to device pixels並設置LayoutRounding

正如我在我的評論中所建議的那樣,您可以將圖像大小調整爲顯示大小,但是,它應該在XAML中明確設置,以確保相同。

您還可以通過將高度或寬度設置爲32並使用ScaleTransform來獲取WPF的圖像大小。

+0

感謝您的回覆,我會嘗試他們。我正在使用Windows 7.即使我的源圖像是48x48,我也不想在功能區上顯示完整大小。這將佔用太多的空間,我只是不想讓它們適當調整大小。 – vanos

+0

這是什麼票? –

+0

你試過對齊設備像素屬性嗎? –

0

我有同樣的問題,我創建了自己的用戶控件來解決這個問題。

這是我做的:

<ribbon:Ribbon> 
     <ribbon:RibbonTab Header="File"> 
      <ribbon:RibbonGroup Header="File"> 
       <views:ImageButton Command="{Binding LoadCommand}" Caption="Open" SourceImage="/Images/save.png"/> 
      </ribbon:RibbonGroup> 
     </ribbon:RibbonTab> 
    </ribbon:Ribbon> 

圖像按鈕用戶控件的ImageButton。XAML

<UserControl Name="control" 

<Button Command="{Binding Command, ElementName=control}" Style="{x:Null}"> 
    <StackPanel> 
     <infrastructure:AutoGreyableImage Width="32" Source="{Binding SourceImage, ElementName=control}"/> 
     <TextBlock Text="{Binding Caption, ElementName=control}"/> 
    </StackPanel> 
</Button> 

圖像按鈕用戶控件ImageButton.xaml.cs

public partial class ImageButton : UserControl 
{ 
    public static DependencyProperty CommandProperty = DependencyProperty.Register(
     "Command", typeof(ICommand), typeof(ImageButton)); 
    public static DependencyProperty SourceProperty = DependencyProperty.Register(
     "SourceImage", typeof(string), typeof(ImageButton)); 
    public static DependencyProperty CaptionProperty = DependencyProperty.Register(
     "Caption", typeof(string), typeof(ImageButton)); 

    public ICommand Command 
    { 
     get 
     { 
      return (ICommand)GetValue(CommandProperty); 
     } 
     set 
     { 
      SetValue(CommandProperty, value); 
     } 

    } 
    public string SourceImage 
    { 
     get 
     { 
      return (string)GetValue(SourceProperty); 
     } 
     set 
     { 
      SetValue(SourceProperty, value); 
     } 

    } 
    public string Caption 
    { 
     get 
     { 
      return (string)GetValue(CaptionProperty); 
     } 
     set 
     { 
      SetValue(CaptionProperty, value); 
     } 

    } 
    public ImageButton() 
    { 
     InitializeComponent(); 
    } 
} 

對於AutogreyableImage,我用this post

這是類

using System.Windows.Controls; 
    using System.Windows.Media; 
    using System.Windows.Media.Imaging; 


/// <summary> 
    /// Class used to have an image that is able to be gray when the control is not enabled. 
    /// Author: Thomas LEBRUN (http://blogs.developpeur.org/tom) 
    /// </summary> 
    public class AutoGreyableImage : Image 
    { 

     /// <summary> 
     /// Initializes a new instance of the <see cref="AutoGreyableImage"/> class. 
     /// </summary> 
     static AutoGreyableImage() 
     { 
      // Override the metadata of the IsEnabled property. 
      IsEnabledProperty.OverrideMetadata(typeof(AutoGreyableImage), new FrameworkPropertyMetadata(true, new PropertyChangedCallback(OnAutoGreyScaleImageIsEnabledPropertyChanged))); 
     } 

     /// <summary> 
     /// Called when [auto grey scale image is enabled property changed]. 
     /// </summary> 
     /// <param name="source">The source.</param> 
     /// <param name="args">The <see cref="System.Windows.DependencyPropertyChangedEventArgs"/> instance containing the event data.</param> 
     private static void OnAutoGreyScaleImageIsEnabledPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs args) 
     { 
      var autoGreyScaleImg = source as AutoGreyableImage; 
      var isEnable = Convert.ToBoolean(args.NewValue); 
      if (autoGreyScaleImg != null) 
      { 
       if (!isEnable) 
       { 
        // Get the source bitmap 
        var bitmapImage = new BitmapImage(new Uri(autoGreyScaleImg.Source.ToString())); 
        // Convert it to Gray 
        autoGreyScaleImg.Source = new FormatConvertedBitmap(bitmapImage, PixelFormats.Gray32Float, null, 0); 
        // Create Opacity Mask for greyscale image as FormatConvertedBitmap does not keep transparency info 
        autoGreyScaleImg.OpacityMask = new ImageBrush(bitmapImage); 
       } 
       else 
       { 
        // Set the Source property to the original value. 
        autoGreyScaleImg.Source = ((FormatConvertedBitmap)autoGreyScaleImg.Source).Source; 
        // Reset the Opcity Mask 
        autoGreyScaleImg.OpacityMask = null; 
       } 
      } 
     } 
    } 

的複製粘貼我希望這會幫助你和其他人來

1

上述其他答案沒有爲我工作,所以我開始了我自己的調查。調整圖像大小爲32x32 幾乎解決了這個問題,但我們有不同的DPI設置的用戶,並且圖像不能在他們的機器上正確縮放。我還應該注意到,我正在使用System.Windows.Controls.Ribbon,它可能與RibbonControlsLibrary稍有不同。

我發現RibbonButton的默認ControlTemplate專門指定了NearestNeighbor作爲位圖縮放選項。好消息是,通過將樣式放入Window資源中來輕鬆覆蓋此控件模板。稍微壞消息是控件模板非常冗長。我將我的系統上的RibbonButton的默認ControlTemplate轉儲到一個文件,並且改變了位圖縮放選項。

首先,你需要在你的文件的頂部這個命名空間聲明,如果你沒有它已經:

xmlns:s="clr-namespace:System;assembly=mscorlib" 

然後把這個風格在窗口中的資源,以覆蓋RibbonButton外觀:

<Style TargetType="RibbonButton"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="RibbonButton"> 
       <Border BorderThickness="{TemplateBinding Border.BorderThickness}" CornerRadius="{TemplateBinding RibbonControlService.CornerRadius}" BorderBrush="{TemplateBinding Border.BorderBrush}" Background="{TemplateBinding Panel.Background}" Name="OuterBorder" SnapsToDevicePixels="True"> 
        <Border BorderThickness="{TemplateBinding Border.BorderThickness}" Padding="{TemplateBinding Control.Padding}" CornerRadius="{TemplateBinding RibbonControlService.CornerRadius}" BorderBrush="#00FFFFFF" Name="InnerBorder"> 
         <StackPanel Name="StackPanel"> 
          <Image Source="{TemplateBinding RibbonControlService.LargeImageSource}" Name="PART_Image" Width="32" Height="32" Margin="{DynamicResource {ComponentResourceKey TypeInTargetAssembly=Ribbon, ResourceId=LargeImageMargin}}" HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}" VerticalAlignment="Center" RenderOptions.BitmapScalingMode="HighQuality" /> 
          <Grid Name="Grid" HorizontalAlignment="Center" VerticalAlignment="Center"> 
           <RibbonTwoLineText TextAlignment="Center" LineHeight="13" LineStackingStrategy="BlockLineHeight" Text="{TemplateBinding RibbonControlService.Label}" Name="TwoLineText" Margin="1,1,1,0" HorizontalAlignment="Center" VerticalAlignment="Top" /> 
          </Grid> 
         </StackPanel> 
        </Border> 
       </Border> 
       <ControlTemplate.Triggers> 
        <DataTrigger Binding="{Binding Path=ControlSizeDefinition.ImageSize, RelativeSource={RelativeSource Mode=Self}}" Value="Large"> 
         <Setter Property="FrameworkElement.MinWidth"> 
          <Setter.Value> 
           <s:Double>44</s:Double> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="FrameworkElement.Height"> 
          <Setter.Value> 
           <s:Double>66</s:Double> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="FrameworkElement.MinHeight" TargetName="Grid"> 
          <Setter.Value> 
           <s:Double>26</s:Double> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="RibbonTwoLineText.HasTwoLines" TargetName="TwoLineText"> 
          <Setter.Value> 
           <s:Boolean>True</s:Boolean> 
          </Setter.Value> 
         </Setter> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Path=ControlSizeDefinition.ImageSize, RelativeSource={RelativeSource Mode=Self}}" Value="Small"> 
         <Setter Property="FrameworkElement.Height"> 
          <Setter.Value> 
           <s:Double>22</s:Double> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="FrameworkElement.Margin" TargetName="PART_Image"> 
          <Setter.Value> 
           <Thickness>1,0,1,0</Thickness> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Image.Source" TargetName="PART_Image"> 
          <Setter.Value> 
           <Binding Path="SmallImageSource" RelativeSource="{RelativeSource Mode=TemplatedParent}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="FrameworkElement.Width" TargetName="PART_Image"> 
          <Setter.Value> 
           <s:Double>16</s:Double> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="FrameworkElement.Height" TargetName="PART_Image"> 
          <Setter.Value> 
           <s:Double>16</s:Double> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="FrameworkElement.HorizontalAlignment" TargetName="TwoLineText"> 
          <Setter.Value> 
           <x:Static Member="HorizontalAlignment.Left" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="FrameworkElement.Margin" TargetName="TwoLineText"> 
          <Setter.Value> 
           <Thickness>1,1,1,1</Thickness> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="StackPanel.Orientation" TargetName="StackPanel"> 
          <Setter.Value> 
           <x:Static Member="Orientation.Horizontal" /> 
          </Setter.Value> 
         </Setter> 
        </DataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=ControlSizeDefinition.ImageSize, RelativeSource={RelativeSource Mode=Self}}" Value="Small" /> 
          <Condition Binding="{Binding Path=IsInQuickAccessToolBar, RelativeSource={RelativeSource Mode=Self}}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="FrameworkElement.Height"> 
          <Setter.Value> 
           <s:Double>NaN</s:Double> 
          </Setter.Value> 
         </Setter> 
        </MultiDataTrigger> 
        <DataTrigger Binding="{Binding Path=ControlSizeDefinition.IsLabelVisible, RelativeSource={RelativeSource Mode=Self}}" Value="False"> 
         <Setter Property="UIElement.Visibility" TargetName="TwoLineText"> 
          <Setter.Value> 
           <x:Static Member="Visibility.Collapsed" /> 
          </Setter.Value> 
         </Setter> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Path=ControlSizeDefinition.ImageSize, RelativeSource={RelativeSource Mode=Self}}" Value="Collapsed"> 
         <Setter Property="UIElement.Visibility" TargetName="PART_Image"> 
          <Setter.Value> 
           <x:Static Member="Visibility.Collapsed" /> 
          </Setter.Value> 
         </Setter> 
        </DataTrigger> 
        <Trigger Property="UIElement.IsMouseOver"> 
         <Setter Property="Panel.Background" TargetName="OuterBorder"> 
          <Setter.Value> 
           <Binding Path="MouseOverBackground" RelativeSource="{RelativeSource Mode=TemplatedParent}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder"> 
          <Setter.Value> 
           <Binding Path="MouseOverBorderBrush" RelativeSource="{RelativeSource Mode=TemplatedParent}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.BorderBrush" TargetName="InnerBorder"> 
          <Setter.Value> 
           <SolidColorBrush>#80FFFFFF</SolidColorBrush> 
          </Setter.Value> 
         </Setter> 
         <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
         </Trigger.Value> 
        </Trigger> 
        <Trigger Property="UIElement.IsKeyboardFocused"> 
         <Setter Property="Panel.Background" TargetName="OuterBorder"> 
          <Setter.Value> 
           <Binding Path="FocusedBackground" RelativeSource="{RelativeSource Mode=TemplatedParent}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder"> 
          <Setter.Value> 
           <Binding Path="FocusedBorderBrush" RelativeSource="{RelativeSource Mode=TemplatedParent}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.BorderBrush" TargetName="InnerBorder"> 
          <Setter.Value> 
           <SolidColorBrush>#80FFFFFF</SolidColorBrush> 
          </Setter.Value> 
         </Setter> 
         <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
         </Trigger.Value> 
        </Trigger> 
        <Trigger Property="ButtonBase.IsPressed"> 
         <Setter Property="Panel.Background" TargetName="OuterBorder"> 
          <Setter.Value> 
           <Binding Path="PressedBackground" RelativeSource="{RelativeSource Mode=TemplatedParent}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder"> 
          <Setter.Value> 
           <Binding Path="PressedBorderBrush" RelativeSource="{RelativeSource Mode=TemplatedParent}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.BorderBrush" TargetName="InnerBorder"> 
          <Setter.Value> 
           <SolidColorBrush>#00FFFFFF</SolidColorBrush> 
          </Setter.Value> 
         </Setter> 
         <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
         </Trigger.Value> 
        </Trigger> 
        <Trigger Property="RibbonControlService.IsInControlGroup"> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder"> 
          <Setter.Value> 
           <Binding Path="Ribbon.BorderBrush" RelativeSource="{RelativeSource Mode=TemplatedParent}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.BorderThickness" TargetName="OuterBorder"> 
          <Setter.Value> 
           <Thickness>0,0,1,0</Thickness> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.CornerRadius" TargetName="OuterBorder"> 
          <Setter.Value> 
           <CornerRadius>0,0,0,0</CornerRadius> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.CornerRadius" TargetName="InnerBorder"> 
          <Setter.Value> 
           <CornerRadius>0,0,0,0</CornerRadius> 
          </Setter.Value> 
         </Setter> 
         <Trigger.Value> 
          <s:Boolean>True</s:Boolean> 
         </Trigger.Value> 
        </Trigger> 
        <Trigger Property="UIElement.IsEnabled"> 
         <Setter Property="UIElement.Opacity" TargetName="PART_Image"> 
          <Setter.Value> 
           <s:Double>0.5</s:Double> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="TextElement.Foreground" TargetName="OuterBorder"> 
          <Setter.Value> 
           <SolidColorBrush>#FF9E9E9E</SolidColorBrush> 
          </Setter.Value> 
         </Setter> 
         <Trigger.Value> 
          <s:Boolean>False</s:Boolean> 
         </Trigger.Value> 
        </Trigger> 
        <DataTrigger Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True"> 
         <Setter Property="TextElement.Foreground" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.MenuTextBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Panel.Background" TargetName="OuterBorder"> 
          <Setter.Value> 
           <SolidColorBrush>#00FFFFFF</SolidColorBrush> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder"> 
          <Setter.Value> 
           <SolidColorBrush>#00FFFFFF</SolidColorBrush> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.CornerRadius" TargetName="OuterBorder"> 
          <Setter.Value> 
           <CornerRadius>0,0,0,0</CornerRadius> 
          </Setter.Value> 
         </Setter> 
        </DataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Mode=TemplatedParent}}" Value="True" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.ControlLightBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Mode=TemplatedParent}}" Value="True" /> 
          <Condition Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=Self}}" Value="False" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.GrayTextBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsDropDownOpen, RelativeSource={RelativeSource Mode=TemplatedParent}, FallbackValue=false}" Value="True" /> 
          <Condition Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=Self}}" Value="False" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.ControlLightBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource Mode=Self}}" Value="True" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Panel.Background" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.HighlightBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.ControlLightBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.CornerRadius" TargetName="OuterBorder"> 
          <Setter.Value> 
           <CornerRadius>0,0,0,0</CornerRadius> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.BorderBrush" TargetName="InnerBorder"> 
          <Setter.Value> 
           <SolidColorBrush>#00FFFFFF</SolidColorBrush> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="TextElement.Foreground" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.HighlightTextBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsKeyboardFocused, RelativeSource={RelativeSource Mode=Self}}" Value="True" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Panel.Background" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.HighlightBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.ControlLightBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.CornerRadius" TargetName="OuterBorder"> 
          <Setter.Value> 
           <CornerRadius>0,0,0,0</CornerRadius> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.BorderBrush" TargetName="InnerBorder"> 
          <Setter.Value> 
           <SolidColorBrush>#00FFFFFF</SolidColorBrush> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="TextElement.Foreground" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.HighlightTextBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsPressed, RelativeSource={RelativeSource Mode=Self}}" Value="True" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Panel.Background" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.HighlightBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.ControlDarkBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="Border.CornerRadius" TargetName="OuterBorder"> 
          <Setter.Value> 
           <CornerRadius>0,0,0,0</CornerRadius> 
          </Setter.Value> 
         </Setter> 
         <Setter Property="TextElement.Foreground" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.HighlightTextBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsInControlGroup, RelativeSource={RelativeSource Mode=Self}}" Value="True" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="Border.BorderBrush" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.ControlLightLightBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
        </MultiDataTrigger> 
        <MultiDataTrigger> 
         <MultiDataTrigger.Conditions> 
          <Condition Binding="{Binding Path=IsEnabled, RelativeSource={RelativeSource Mode=Self}}" Value="False" /> 
          <Condition Binding="{Binding Path=(SystemParameters.HighContrast)}" Value="True" /> 
         </MultiDataTrigger.Conditions> 
         <Setter Property="TextElement.Foreground" TargetName="OuterBorder"> 
          <Setter.Value> 
           <DynamicResource ResourceKey="{x:Static SystemColors.GrayTextBrushKey}" /> 
          </Setter.Value> 
         </Setter> 
        </MultiDataTrigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style>