WPF의 확인란 왼쪽에 있는 텍스트?
확인란 자체의 왼쪽에 확인란 내용(텍스트)을 배치하는 가장 쉬운 방법은 무엇입니까?
"용이성"과 "정확성"을 극대화하는 솔루션은 다음과 같습니다.RightToLeft
확인란LeftToRight
내용:
<CheckBox FlowDirection="RightToLeft">
<TextBlock FlowDirection="LeftToRight" Text="CheckBox Content:" />
</CheckBox>
또는 스타일을 원하는 경우:
<Style TargetType="CheckBox">
<Setter Property="FlowDirection" Value="RightToLeft" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<ContentControl FlowDirection="LeftToRight" Content="{Binding}" />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
코드:
System.Windows.Controls.CheckBox checkBox = new System.Windows.Controls.CheckBox();
checkBox.Content = ":CheckBox Enabled";
checkBox.FlowDirection = System.Windows.FlowDirection.RightToLeft;
XAML에서:
<CheckBox FlowDirection="RightToLeft" Content=":CheckBox Enabled" />
편집
사용자 punker76은 텍스트 요소에 영향을 미치는 흐름 방향으로 인해 발생할 수 있는 영향으로 인해 콜론 ":"이 텍스트 앞의 끝("CheckBox Enabled:")에 올바르게 표시되어야 한다는 것을 알아차리는 데 도움이 되었습니다.잘 잡았습니다.
두 시간을 들였지만 최선의 결정을 내렸습니다.
<Style x:Key="TextAlignLeft" TargetType="CheckBox">
<Style.Resources>
<Style TargetType="Path">
<Setter Property="FlowDirection" Value="LeftToRight" />
</Style>
<Style TargetType="TextBlock">
<Setter Property="FlowDirection" Value="LeftToRight" />
</Style>
</Style.Resources>
<Setter Property="FlowDirection" Value="RightToLeft" />
</Style>
시간이 많이 지났고 늦었다는 것을 압니다.하지만 몇 가지 복잡한 대답을 하고 인터넷에서 많은 것을 검색한 후에 저는 마침내 여기서 틱을 왜곡하지 않고 이것을 달성할 수 있는 가장 간단한 방법을 찾았습니다.
<CheckBox Content="Checked" FlowDirection="RightToLeft">
<CheckBox.Resources>
<Style TargetType="{x:Type Path}">
<Setter Property="FlowDirection" Value="LeftToRight" />
</Style>
</CheckBox.Resources>
</CheckBox>
결과:
다른 방법은 새로운 사용자 정의 스타일을 만드는 것입니다.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:Microsoft_Windows_Themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<SolidColorBrush Color="#F4F4F4"
x:Key="CheckBoxFillNormal" />
<SolidColorBrush Color="#8E8F8F"
x:Key="CheckBoxStroke" />
<Style x:Key="EmptyCheckBoxFocusVisual">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle Margin="1"
SnapsToDevicePixels="true"
Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
StrokeDashArray="1 2"
StrokeThickness="1" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="CheckRadioFocusVisual">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle Margin="14,0,0,0"
SnapsToDevicePixels="true"
Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
StrokeDashArray="1 2"
StrokeThickness="1" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type CheckBox}"
x:Key="ContentLeftCheckBoxStyle">
<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" />
<Setter Property="Background"
Value="{StaticResource CheckBoxFillNormal}" />
<Setter Property="BorderBrush"
Value="{StaticResource CheckBoxStroke}" />
<Setter Property="BorderThickness"
Value="1" />
<Setter Property="FocusVisualStyle"
Value="{StaticResource EmptyCheckBoxFocusVisual}" />
<Setter Property="VerticalContentAlignment"
Value="Center" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type CheckBox}">
<StackPanel Orientation="Horizontal">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
RecognizesAccessKey="True"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
<BulletDecorator Background="Transparent"
SnapsToDevicePixels="true"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
<BulletDecorator.Bullet>
<Microsoft_Windows_Themes:BulletChrome Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
IsChecked="{TemplateBinding IsChecked}"
RenderMouseOver="{TemplateBinding IsMouseOver}"
RenderPressed="{TemplateBinding IsPressed}" />
</BulletDecorator.Bullet>
</BulletDecorator>
</StackPanel>
<ControlTemplate.Triggers>
<Trigger Property="HasContent"
Value="true">
<Setter Property="FocusVisualStyle"
Value="{StaticResource CheckRadioFocusVisual}" />
<Setter Property="Padding"
Value="0,0,4,0" />
</Trigger>
<Trigger Property="IsEnabled"
Value="false">
<Setter Property="Foreground"
Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
용도:
<CheckBox Style="{StaticResource ContentLeftCheckBoxStyle}" Content="CheckBox:" />
그게 도움이 되길 바랍니다!
완전히 새로운 CheckBox 스타일을 정의할 때 위에서 설명한 흐름 방향 및 대량의 코드와 관련된 미묘한 문제를 방지하기 위한 또 다른 해결 방법은 레이블(원하는 CheckBox 내용 문자열 포함)과 CheckBox(내용 문자열 없음)이 포함된 WrapPanel을 사용하는 것입니다.
<WrapPanel>
<Label Content="Checkbox content"/>
<CheckBox VerticalAlignment="Center" Margin="5,0,0,0"/>
</WrapPanel>
가장 쉬운 방법은 스택 패널을 사용하는 것입니다.
<StackPanel Orientation="Horizontal">
<TextBlock Text="Some Text"/>
<CheckBox />
</StackPanel>
확인란 템플릿을 편집할 수 있으며 직사각형 앞에 텍스트 블록을 배치할 수 있습니다.
언급URL : https://stackoverflow.com/questions/17465867/text-on-the-left-side-of-checkbox-in-wpf
'programing' 카테고리의 다른 글
mongoose를 사용하여 mongodb에서 컬렉션의 만료 시간 설정 (0) | 2023.05.06 |
---|---|
파이썬 사전: u' chars 제거 (0) | 2023.05.06 |
스크립트 테스트를 위한 PowerShell의 에코 기능 (0) | 2023.05.06 |
Angular-cli에서 모듈을 생성하는 동안 라우팅 모듈 생성 (0) | 2023.05.06 |
빌드 번호를 늘리는 더 좋은 방법은 무엇입니까? (0) | 2023.05.06 |