2012-02-03 115 views
0

我已經在WPF中創建了一個複選框,但它看起來非常醜陋,框中的勾號非常鋸齒。我試圖將RenderOptions.EdgeMode設置爲別名,但這並沒有解決它,我錯過了什麼?複選框路徑別名

的代碼如下:

<Style x:Key="{x:Type CheckBox}" TargetType="CheckBox"> 
     <Setter Property="SnapsToDevicePixels" Value="true"/> 
     <Setter Property="OverridesDefaultStyle" Value="true"/> 
     <Setter Property="FocusVisualStyle" Value="{DynamicResource CheckBoxFocusVisual}" />   
     <Setter Property="Foreground" Value="{StaticResource FGBrush}"/> 
     <Setter Property="HorizontalContentAlignment" Value="Stretch"/> 
     <Setter Property="VerticalContentAlignment" Value="Stretch"/> 
     <Setter Property="RenderOptions.EdgeMode" Value="Aliased"/>   
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="CheckBox"> 
        <BulletDecorator Background="Transparent"> 
         <BulletDecorator.Bullet> 
          <Grid Width="12" Height="12" MinHeight="{DynamicResource ResourceKey=MinimumIteractSizeDips}" 
             MinWidth="{DynamicResource ResourceKey=MinimumIteractSizeDips}" 
            SnapsToDevicePixels="True" RenderOptions.EdgeMode="Aliased"> 

           <Border x:Name="Border" 
             BitmapEffect="{StaticResource DropShadow}" 
             MinHeight="{DynamicResource ResourceKey=MinimumIteractSizeDips}" 
             MinWidth="{DynamicResource ResourceKey=MinimumIteractSizeDips}" 
             CornerRadius="0" 
             Background="{StaticResource GreyGradientBrush}" 
             BorderThickness="1" 
             BorderBrush="{StaticResource NormalBorderBrush}" RenderOptions.EdgeMode="Aliased"> 

            <!--<Path Stretch="Fill" 
               Margin="3" 
               x:Name="CheckMark" 
            SnapsToDevicePixels="False" 
            Stroke="{StaticResource GlyphBrush}" 
            StrokeThickness="3" 
            Fill="{DynamicResource GlyphBrush}" 
              RenderOptions.EdgeMode="Aliased" 
            Data="M103.78572,598.96112 L105.09846,597.5661 L107.00806,600.16229 C107.00806,600.16229 109.91004,592.74463 109.91004,592.74463 C109.91004,592.74463 111.74678,593.79761 111.74678,593.79761 C111.74678,593.79761 107.88566,602.75848 107.88566,602.75848 L106.60118,602.75848 z" />--> 


            <Path Stretch="Fill" 
               Margin="3" 
               x:Name="CheckMark" 
            SnapsToDevicePixels="False" 
            Stroke="{StaticResource GlyphBrush}" 
            StrokeThickness="3" 
            Fill="{DynamicResource GlyphBrush}" 
              RenderOptions.EdgeMode="Aliased" 
            Data="M103.78572,598.96112 L105.09846,597.5661 L107.00806,600.16229 C107.00806,600.16229 109.91004,592.74463 109.91004,592.74463 C109.91004,592.74463 111.74678,593.79761 111.74678,593.79761 C111.74678,593.79761 107.88566,602.75848 107.88566,602.75848 L106.60118,602.75848 z" /> 

           </Border> 
          </Grid> 
         </BulletDecorator.Bullet> 
         <ContentPresenter Margin="4,0,0,0" 
           VerticalAlignment="Center" 
           HorizontalAlignment="Left" 
           RecognizesAccessKey="True"/> 
        </BulletDecorator> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsChecked" Value="false"> 
          <Setter TargetName="CheckMark" Property="Visibility" Value="Collapsed"/> 
         </Trigger> 
         <!--<Trigger Property="IsChecked" Value="{x:Null}"> 
          <Setter TargetName="CheckMark" Property="Data" Value="M 0 7 L 7 0" /> 
         </Trigger>--> 
         <Trigger Property="IsMouseOver" Value="true"> 
          <Trigger.EnterActions> 
           <BeginStoryboard Name="HighlightAnim"> 
            <Storyboard TargetName="Border" TargetProperty="Opacity" > 
             <DoubleAnimation To="0.5" Duration="00:00:00.1"/> 
            </Storyboard> 
           </BeginStoryboard> 
          </Trigger.EnterActions> 
          <Trigger.ExitActions> 
           <StopStoryboard BeginStoryboardName="HighlightAnim"/> 
          </Trigger.ExitActions> 
         </Trigger> 
         <Trigger Property="IsPressed" Value="true"> 
          <Setter TargetName="Border" Property="Background" Value="{StaticResource PressedBrush}" /> 
          <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource PressedBorderBrush}" /> 
         </Trigger> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter TargetName="Border" Property="Background" Value="{StaticResource DisabledBackgroundBrush}" /> 
          <Setter TargetName="Border" Property="BorderBrush" Value="{StaticResource DisabledBorderBrush}" /> 
          <Setter Property="Foreground" Value="{StaticResource DisabledForegroundBrush}"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

回答

0

如果我猜我會說這事做的所有小數在你Path對象,或者也許是Stretch=Fill

這一事實是默認的複選框Path

<Path Visibility="Collapsed" 
     Width="7" 
     Height="7" 
     x:Name="CheckMark" 
     SnapsToDevicePixels="False" 
     StrokeThickness="2" 
     Data="M 0 0 L 7 7 M 0 7 L 7 0"> 
     <Path.Stroke> 
      <SolidColorBrush Color="{DynamicResource GlyphColor}" /> 
     </Path.Stroke> 
</Path> 

這是你的Path

<Path Stretch="Fill" 
     Margin="3" 
     x:Name="CheckMark" 
     SnapsToDevicePixels="False" 
     Stroke="{StaticResource GlyphBrush}" 
     StrokeThickness="3" 
     Fill="{DynamicResource GlyphBrush}" 
     RenderOptions.EdgeMode="Aliased" 
     Data="M103.78572,598.96112 L105.09846,597.5661 L107.00806,600.16229 C107.00806,600.16229 109.91004,592.74463 109.91004,592.74463 C109.91004,592.74463 111.74678,593.79761 111.74678,593.79761 C111.74678,593.79761 107.88566,602.75848 107.88566,602.75848 L106.60118,602.75848 z" /> 

我會建議每次更改一個屬性,將您的版本更改爲MSDN版本,並查看哪一個修復了問題。我猜它是Path.Data,但它也可能是其他屬性之一。

+0

拉伸=「填充」被設置爲我需要能夠重新調整大小的控件。必須有一種方法才能讓圖像順利調整大小。 – user1145533 2012-02-03 15:09:48

+0

@ user1145533您是否嘗試將它放入「ViewBox」? – Rachel 2012-02-03 15:16:14

+0

剛剛給了一個去,現在滴答看起來好多了,雖然由於某種原因,它現在比盒子大得多。任何想法爲什麼ViewBox如此之大?你是怎麼得到這個複選框的默認值的? – user1145533 2012-02-03 15:52:35