CheckBox를 내용에 맞추려면 어떻게 해야 합니까?
WPF CheckBox 모양은 확인 부분을 레이블(내용) 부분과 잘못 정렬합니다.검사는 다음과 같이 내용보다 약간 위에 있습니다.

XAML은 다음과 같습니다.
<CheckBox Content="Poorly aligned CheckBox" Margin="9"/>
CheckBox는 그리드 셀 안에 있습니다.XAML CheckBox의 내용을 세로로 정렬하고 확인하는 간단한 방법이 있습니까?저는 여러 가지 속성 조합을 시도해 보았지만 실패했습니다.여기서 비슷한 질문을 봤는데 답이 너무 복잡합니다.
잘 부탁드립니다.
EDIT: 이 문제는 제가 14로 설정한 Window Font Size 때문에 발생했습니다.문제를 다시 만들려면 CheckBox FontSize를 14(또는 그 이상)으로 설정합니다.제 프로그램은 공장 직원들이 멀리서 보기 때문에 사용자가 윈도우 글꼴 크기를 늘리거나 줄일 수 있습니다.
너무 늦은 건 알지만 마진을 설정하지 않고 더 나은 해결책이 있습니다.마진은 높이에 따라 다르게 설정해야 합니다.TextBlock또는Checkbox.
<CheckBox VerticalAlignment="Center" VerticalContentAlignment="Center">
<TextBlock Text="Well aligned Checkbox" VerticalAlignment="Center" />
</CheckBox>
업데이트:
아래 @nmarler의 코멘트를 확인해 볼 가치가 있습니다.
편집 - 새 답변: (이전에는 좋지 않았습니다)
제가 생각하는 최선의 방법은 아니지만, 그 일을 할 수 있습니다.
<CheckBox>
<TextBlock Text="Poorly aligned CheckBox" Margin="0,-2,0,0"/>
</CheckBox>
마이너스 마진을 사용하여 콘텐츠를 밀어 올리면 다음과 같은 결과를 얻을 수 있습니다.
의 CheckBoxWPF에서는 그렇게 보이지 않습니다.XP와 Windows 7 모두에서 완벽하게 조정됩니다.이 문제를 재현하는 방법에 대해 좀 더 자세히 설명해 주시겠습니까?
지금 보고 계신 오프셋을 얻기 위해 제가 생각할 수 있는 두 가지는 두 가지 중 하나입니다.Padding 는또.VerticalContentAlignment은 " " 입니다.CheckBox 한 치 가 대의 값입니다.VerticalContentAlignment이라Top a 리고a.CheckBox와 함께Content가지다Padding로 설정한."4,0,0,0"이 두 가지를 바꾸어서 어떤 차이가 있는지 확인해 보십시오.
여기 비교가 있습니다.

다음의 Xaml로부터.
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<CheckBox Grid.Row="0"
Content="Poorly aligned CheckBox" Margin="9" />
<CheckBox Grid.Row="1"
Content="Padding=4,4,0,0" Margin="9" Padding="4,4,0,0"/>
<CheckBox Grid.Row="2"
Content="Vertical Center" Margin="9"
VerticalContentAlignment="Center"/>
<CheckBox Grid.Row="3"
Content="Vertical Top" Margin="9"
VerticalContentAlignment="Top"/>
</Grid>
내용에 대한 텍스트 블록을 만들 필요도 없고 필요 없는 추가 코드를 작성할 필요도 없는 간단한 해결 방법이 있습니다."수직 내용 정렬"을 사용하면 됩니다.예:
<CheckBox Content="Sample of Text" VerticalContentAlignment="Center"/>
수평 방향의 스택 패널에 빈 CheckBox와 내용을 별도의 컨트롤로 배치합니다.모든 글꼴 크기에서 작동합니다.
<StackPanel Orientation="Horizontal">
<CheckBox VerticalAlignment="Center" />
<TextBlock VerticalAlignment="Center" Text="Option X" />
</StackPanel />
음의 상단 패딩을 적용하는 것은 내 레이아웃에 딱 맞습니다.
<CheckBox Content="Poorly aligned CheckBox" Padding="4,-3,0,0" Margin="9"/>
제 체크박스는 잘 정렬되어 있는데, 당신의 체크박스는 무엇이 다른지 궁금합니다.유일한 분명한 차이점은 당신이 나보다 더 큰 글꼴을 사용하고 있다는 것이며, 이는 다음 질문을 떠올리게 합니다.
내용이 텍스트 블록인 경우 확인란이 최상위 맞춤으로 표시되어 글꼴 크기를 늘렸을 때 이상하게 보일 수 있습니다.액세스 권한을 사용해 보십시오.대신 CheckBox의 내용으로 텍스트:
<CheckBox Margin="9"><AccessText>Better aligned CheckBox?</AccessText></CheckBox>
ControlTemplate TargetType="{x:CheckBox}"를 입력합니다. "폭=13 높이=13"이 표시됩니다. 여백="0,4,0,0"(왼쪽,위,오른쪽,아래)에 추가하고 원하는 결과를 얻을 수 있도록 조정합니다.CheckBox와 Glyph Size를 확대한 후 여백으로 다시 정렬했습니다.전체 템플릿은 다음과 같습니다.
<Style x:Key="{x:Type CheckBox}"
TargetType="{x:Type CheckBox}">
<Setter Property="SnapsToDevicePixels"
Value="true" />
<Setter Property="OverridesDefaultStyle"
Value="true" />
<Setter Property="FocusVisualStyle"
Value="{DynamicResource CheckBoxFocusVisual}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CheckBox}">
<BulletDecorator Background="Transparent">
<BulletDecorator.Bullet>
<!--Width=13 Height=13 CornerRadius=0-->
<Border x:Name="Border"
Width="15"
Height="15"
Margin="0,4,0,0"
CornerRadius="1"
BorderThickness="1">
<Border.BorderBrush>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="{DynamicResource BorderLightColor}"
Offset="0.0" />
<GradientStop Color="{DynamicResource BorderDarkColor}"
Offset="1.0" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Border.BorderBrush>
<Border.Background>
<LinearGradientBrush StartPoint="0,0"
EndPoint="0,1">
<LinearGradientBrush.GradientStops>
<GradientStopCollection>
<GradientStop Color="{DynamicResource ControlLightColor}" />
<GradientStop Color="{DynamicResource ControlMediumColor}"
Offset="1.0" />
</GradientStopCollection>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Border.Background>
<Grid>
<!--Width=7 Height=7-->
<Path Visibility="Collapsed"
Width="8"
Height="8"
Margin="0,0,0,0"
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 Visibility="Collapsed"
Width="8"
Height="8"
Margin="0,0,0,0"
x:Name="InderminateMark"
SnapsToDevicePixels="False"
StrokeThickness="2"
Data="M 0 7 L 7 0">
<Path.Stroke>
<SolidColorBrush Color="{DynamicResource GlyphColor}" />
</Path.Stroke>
</Path>
</Grid>
</Border>
</BulletDecorator.Bullet>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" />
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Panel.Background).
(GradientBrush.GradientStops)[1].(GradientStop.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource ControlMouseOverColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Pressed">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Panel.Background).
(GradientBrush.GradientStops)[1].(GradientStop.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource ControlPressedColor}" />
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Border.BorderBrush).
(GradientBrush.GradientStops)[0].(GradientStop.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource PressedBorderDarkColor}" />
</ColorAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Border.BorderBrush).
(GradientBrush.GradientStops)[1].(GradientStop.Color)">
<EasingColorKeyFrame KeyTime="0"
Value="{StaticResource PressedBorderLightColor}" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Disabled" />
</VisualStateGroup>
<VisualStateGroup x:Name="CheckStates">
<VisualState x:Name="Checked">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"
Storyboard.TargetName="CheckMark">
<DiscreteObjectKeyFrame KeyTime="0"
Value="{x:Static Visibility.Visible}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Unchecked" />
<VisualState x:Name="Indeterminate">
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)"
Storyboard.TargetName="InderminateMark">
<DiscreteObjectKeyFrame KeyTime="0"
Value="{x:Static Visibility.Visible}" />
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<!--4,0,0,0-->
<ContentPresenter Margin="5,0,0,0"
VerticalAlignment="Center"
HorizontalAlignment="Left"
RecognizesAccessKey="True" />
</BulletDecorator>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
언급URL : https://stackoverflow.com/questions/7232434/how-can-i-align-a-checkbox-with-its-content
'programing' 카테고리의 다른 글
| Windows에서 npm 런타임 스크립트를 위한 셸을 설정하는 방법 (0) | 2023.04.29 |
|---|---|
| 개체에 특정 속성이 있는지 어떻게 테스트할 수 있습니까? (0) | 2023.04.29 |
| Azure WebApp As.NET Core 2 오류:응용 프로그램을 시작하는 동안 오류가 발생했습니다. (0) | 2023.04.29 |
| 이클립스에서 안드로이드 프로젝트의 패키지 이름을 변경하는 방법은? (0) | 2023.04.29 |
| 설치된 SQL Server 인스턴스와 해당 버전을 확인하려면 어떻게 해야 합니까? (0) | 2023.04.29 |