2013-07-04 2 views

답변

64

LeftToRight 내용으로 RightToLeft 체크 박스를 만드는 것입니다 "용이"와 "정확성"을 극대화 솔루션 TextBlock의이 배치 할 수 있습니다 :

<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> 
+1

나는 그 말이 정말 쉽다는 것을 말해야한다 ... – punker76

+16

어떤 이유로 든,이 해결책을 쓸모 없게하는 체크 표시 문자 (* note : * .NET 4.5)를 뒤집는다. 가장 좋은 방법은 원본 스타일의 사본을 편집하고 템플릿을 사용자 정의하여이 문제를 처리하는 것입니다. – erodewald

+1

일부 사람들은 기본 'CheckBox'스타일의 사본을 얻는 방법을 모를 수도 있기 때문에 첨부 된 속성을 활용하는 구현을 [요점] (https://gist.github.com)에 포기하기로 결정했습니다./gen3ric/be2aa4a6d2d82739b835). 여기에는 ** Full ** CheckBox' 스타일과 'ControlTemplate.Triggers'에 약간의 수정이 포함되어 있습니다. – erodewald

25

는 : XAML에서

System.Windows.Controls.CheckBox checkBox = new System.Windows.Controls.CheckBox(); 
checkBox.Content = ":CheckBox Enabled"; 
checkBox.FlowDirection = System.Windows.FlowDirection.RightToLeft; 

:

<CheckBox FlowDirection="RightToLeft" Content=":CheckBox Enabled" /> 

편집

punker76가 콜론을 주목 도와주었습니다 사용자는 ":"장소이어야한다 끝에 정확하게 표시 할 텍스트 ("CheckBox Enabled :"), 영향을주는 흐름 방향에 의해 아마도 텍스트 요소에 발생합니다. 멋지다.

+2

. 이것은 CheckBox를 구성하는 모든 구성 요소가 FlowDirection 속성을 상속하기 때문에 발생합니다. 해결책은 여기에 설명되어 있습니다. [link] (http://stackoverflow.com/questions/20911471/wpf-button-icon-gets-mirrored-why/20912496#20912496) –

+0

@ punker76 같은 문제로 인해 ": ABC "를"ABC : "로 표시합니다. ContentPresenter의 FlowDirection을 LeftToRight로 설정하면 왼쪽에서 오른쪽으로 스크립트에 대해 텍스트가 예상대로 표시됩니다. –

14

또 다른 방법은 새 사용자 지정 스타일을 만드는 것입니다

<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:" /> 

enter image description here

희망!

+3

우리 모두는 그 해답을 알고 있었고이 문제를 해결하는 것이 올바른 방법이라는 것을 알고 있습니다. 그러나 "가장 쉬운"방법은 흐름 방향을 바꾸는 것입니다. :) –

+1

@LepiPerke 좋아요, 왼쪽의 ":"은 괜찮습니다 :-) – punker76

+9

이 답변은 실제로 올바른 것으로 표시되어야합니다. 모든 올바른 작업을 수행하며 뒤집힌 체크 표시와 뒤집힌 텍스트에는 아무런 문제가 없습니다. FlowDirection의 사용을 옹호하는 답변은 문자 순서 및 비대칭 체크 표시에 대해 일관되게 작동하지 않습니다. –

0

당신은 체크 박스 템플릿을 편집 할 수 있습니다 이상 앞서 사각형의

11

다른 해결 방법, 미묘한 문제 디를 방지하기를 흐름 방향과 완전히 새로운 CheckBox의 스타일을 형성 코드 다량 상기 scussed 단 (소망의 CheckBox 콘텐츠 문자열) 라벨을 함유하는 WrapPanel 및 (NO 내용 캐릭터)와, 체크 박스를 사용하는 것이다.

<WrapPanel> 
    <Label Content="Checkbox content"/> 
    <CheckBox VerticalAlignment="Center" Margin="5,0,0,0"/> 
</WrapPanel> 
3

가장 쉬운 방법은 스택 패널을 사용하는 것입니다 : 나는 그것을 2 시간을 보냈다

  <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="Some Text"/> 
       <CheckBox /> 
      </StackPanel> 
+1

텍스트를 클릭 할 때 확인/선택 취소하는 기능을 잃어도 상관이 없다면 괜찮을 것 같습니다. – failedprogramming

+1

이벤트 핸들러는이 문제를 처리 할 수 ​​있습니다. – simonalexander2005

8

을,하지만 난 최선의 결정

<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> 
1

나는 그것이 오랜만이야 알을 발견하고 나는 늦었다. 그러나 몇 가지 복잡한 답변을 통과하고 인터넷에서 많은 것을 검색 한 후에 나는 진드기를 here에서 왜곡하지 않고 이것을 달성하는 가장 간단한 방법을 마침내 발견했습니다.

<CheckBox Content="Checked" FlowDirection="RightToLeft"> 
    <CheckBox.Resources> 
     <Style TargetType="{x:Type Path}"> 
      <Setter Property="FlowDirection" Value="LeftToRight" /> 
     </Style> 
    </CheckBox.Resources> 
</CheckBox> 

결과 : 당신의 틱 마크가 수평으로 이성을 상실됩니다, 적어도 뇌졸중 배열로 구현이 문제가 있습니다

enter image description here

관련 문제