2016-08-13 2 views
-3

여기에 이상한 버그가 있습니다. CheckBox 컨트롤은 항상 제곱되었습니다. 이제는 그렇지 않은 것으로 나타났습니다. 높이보다 한 픽셀 큽니다. 빈 WPF 응용 프로그램을 조금 실험 한 결과, UseLayoutRounding 설정에 따라 달라지는 것을 발견했습니다. false으로 설정하면 CheckBox는 절대로 정사각형이 아닙니다. true으로 설정하면 실제 레이아웃 값과 반올림 방법 또는 픽셀에 물리기 방법에 따라 다릅니다.WPF CheckBox가 제곱되지 않았습니다

.NET Framework 4.5.2, 4.6 또는 4.6.1을 대상으로 빈 WPF 응용 프로그램을 만들고 (이 중 테스트를 거쳤습니다) Windows 10에서 실행하십시오. 다음은 재생할 최소 XAML입니다. 세 번째 상태는 픽셀을 측정하지 않고 양식을 더 쉽게 인식 할 수 있도록 채워진 "사각형"상자를 보여줍니다.

<Window 
    x:Class="CheckBoxTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" UseLayoutRounding="False"> 
    <Grid> 
     <CheckBox HorizontalAlignment="Center" VerticalAlignment="Center" IsThreeState="True" IsChecked="{x:Null}"/> 
    </Grid> 
</Window> 

그런 다음 창 너비를 끌어서 사각형과 한 픽셀 사이를 전환 할 때 CheckBox를 봅니다. 또 다른 응용 프로그램에서는 항상 1 픽셀 더 넓으며 결코 제곱 된 형태를 갖지 않습니다.

WPF의 버그입니까? Windows 10에서만 발생합니까?

추신 : 이렇게하려면 높은 DPI 모니터를 사용하지 않는 것이 좋지만보기가 어려울 수 있습니다.

+0

WPF를 사용하는 모든 벡터이므로 prelapsarian 부동 소수점 추상화로 작업 한 다음 픽셀에 매핑됩니다. 나는 그것을 "버그"라고 부르지 않을 것이며 인간 상태의 유감스러운 부산물이라고 할 수 있습니다. –

+1

오해하지 마세요. 그러나이 질문의 목적은 무엇입니까? Window의 크기를 재조정 할 때 약간 깜박 거립니다 만, UseLayoutRounding을 false로 설정하지 않고도 깜박입니다. – lokusking

+0

@lokusking CheckBox가 제곱되지 않습니다. 왜곡되고 추악합니다. 내 응용 프로그램에서 그 문제를 해결하고 싶습니다. – ygoe

답변

1

체크 상자의 기본 스타일에 버그가 있습니다. 어떤 이유로 그들은 체크 박스 컨트롤 템플릿의 격자에 레이아웃 반올림을 사용하지 않기로 결정했습니다.

    <Border x:Name="checkBoxBorder" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="1" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"> 
         <Grid x:Name="markGrid" UseLayoutRounding="True"> 
          <Path x:Name="optionMark" Data="F1 M 9.97498,1.22334L 4.6983,9.09834L 4.52164,9.09834L 0,5.19331L 1.27664,3.52165L 4.255,6.08833L 8.33331,1.52588e-005L 9.97498,1.22334 Z " Fill="{StaticResource OptionMark.Static.Glyph}" Margin="1" Opacity="0" Stretch="None"/> 
          <Rectangle x:Name="indeterminateMark" Fill="{StaticResource OptionMark.Static.Glyph}" Margin="2" Opacity="0"/> 
         </Grid> 
        </Border> 

는 어쩌면이 같은 템플릿을 수정하더라도 때문에, 그것은 여전히 ​​당신은 디자이너에서 크기를 조정하지만, 당신이 그것을 실행하지 않을 경우시에서 inchworms.

관련 문제