텍스트 상자의 텍스트 트래핑 속성을 menuitem의 ischecked 값에 어떻게 바인딩합니까?

StackOverflow https://stackoverflow.com/questions/250840

문제

텍스트 상자의 텍스트 트래핑 속성에는 세 가지 가능한 값이 있습니다.

  • 포장하다
  • 이제 랩
  • Wrapwith Overflow

나는 menuitem의 위조 속성에 결합하고 싶습니다. menuitem이 확인되면 텍스트 상자의 텍스트 트래핑 속성을 랩핑하도록 설정하려고합니다. menuitem이 확인되지 않으면 텍스트 상자의 텍스트 트래핑 속성을 nowrap으로 설정하려고합니다.

요약하면, 나는 두 개의 상태를 가진 제어를 2 값 이상의 열거 값으로 바인딩하려고 노력하고 있습니다.

편집하다 가능하면 XAML에서 이것을 달성하고 싶습니다.

편집하다 나는 ivalueconverter를 사용하여 이것을하는 방법을 알아 냈습니다. 아마도 이것을하는 더 좋은 방법이 있습니까? 여기에 내가 한 일은 다음과 같습니다.


Window.Resources에서 ValueConverter에 대한 언급을 선언했습니다.

<local:Boolean2TextWrapping x:Key="Boolean2TextWrapping" />

내 텍스트 상자에서 나는 menuitem에 바인딩을 만들고 바인딩 문에 변환기를 포함시켰다.

TextWrapping="{Binding ElementName=MenuItemWordWrap, Path=IsChecked, Converter={StaticResource Boolean2TextWrapping}}"

ValueConverter는 다음과 같습니다.

public class Boolean2TextWrapping : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo cultureInfo)
        {
            if (((bool)value) == false)
            {
                return TextWrapping.NoWrap;
            }
            return TextWrapping.Wrap;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
도움이 되었습니까?

해결책

XAML 에서이 모든 작업을 수행하려면 A를 사용해야합니다. 스타일 그리고 a Datatrigger.

<StackPanel>
    <CheckBox x:Name="WordWrap">Word Wrap</CheckBox>
    <TextBlock Width="50">
        Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin lacinia nibh non augue. Pellentesque pretium neque et neque auctor adipiscing.

        <TextBlock.Style>
            <Style TargetType="{x:Type TextBlock}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsChecked, ElementName=WordWrap}" Value="True">
                        <Setter Property="TextWrapping" Value="Wrap" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
</StackPanel>

다른 팁

내 생각에는 유일한 것입니다 이를 수행하는 일반적인 방법은 이미 수행 한 것처럼 값 변환기를 사용하는 것입니다.

때로는 이미 구축 한 기존 값 변환기를 찾을 수 있습니다. 예를 들어, System.Windows.controls에서 Microsoft는 부울을 열거하는 BOOLEANTOVISIBLECONVERTER를 작성했습니다. 이는 부울을 가시성 열거로 변환합니다.

한 가지 아이디어는 .NET 리플렉터를 사용하고 System.Windows.Data.AivalueConverter로 이동 한 다음 분석 기능 (특히 '사용')을 사용하여 IvalueConverter를 구현 한 내용을 확인하는 것입니다. 당신의 목적에 맞는 컨버터를 찾는 것이 행운입니다.

관련 메모에서 BooleanTovisibilityConverter는 위에서하려는 것과 매우 유사합니다.

편집하다:Todd White의 TextBox 스타일링과 스타일의 Datatrigger를 사용하겠다는 제안을 정말 좋아합니다. 변환기를 피하려면 아주 좋은 생각입니다.

나는 당신이 .net에 대해 이야기하고 있다고 가정합니다. 값이 같은 유형 (부울 대 열거)이 아니기 때문에 데이터베이닝이 여기서 작동하지 않을 것이라고 생각합니다. 가장 쉬운 솔루션은 해당 메뉴 항목의 CheckEdchanged 이벤트를 처리하고 그에 따라 텍스트 상자의 랩 모드를 조정하는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top