该TextWrapping财产的文本有三个可能值:

  • 包裹
  • NoWrap
  • WrapWithOverflow

我谨结合IsChecked酒店的菜单项.如果菜单项检查是,我要设置TextWrapping财产的文本框到包裹。如果菜单项的是,我要设置TextWrapping财产的文本框NoWrap.

总的来说,我正试图将控制,有两个国家为两个数值的枚举,具有超过两个价值观。

[编辑] 我要完成这在摘要,如果可能的。

[编辑] 我想通了,如何做到这一使用一个IValueConverter.也许有一个更好的方式做到这一点?这里是我做了什么:


在窗口。资源,我宣布一个参考我ValueConverter.

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

在我的文本,我结合到一个菜单项的转换器在结合发言。

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你需要使用一个 风格 和一个 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>

其他提示

我认为, 只有右 典型的方式来做到这一点是利用一个价值转换器喜欢你已经完成。

有时候你可以找到一个现有的价值转换器,你已经建立已经...或者更好,微软已经建立,用于你。例如,在系统。窗户。控制,Microsoft写了一BooleanToVisibilityConverter...这将bool到一枚举的可见度...转换到真正的可见和虚假的,倒塌的(而不用担心隐藏)。

一个想法是使用。净反射器,导航系统。窗户。数据。IValueConverter,然后使用的分析功能(特别是,'使用的'),并看到什么东西已经实施IValueConverter...你也许会得到幸运的找到一个转换器,适合你的目的。

在一个相关的注意,BooleanToVisibilityConverter是非常类似于你正在尝试做以上。

编辑: 我真的很喜欢托德白的建议定型的文本框和使用DataTrigger在的风格。这是一个非常好的主意如果你想要避免一转换器。

我假设你是在谈论。网。我不认为数据绑定将工作在这里,因为价值的不同类型(布尔vs enum).最简单的解决办法是处理CheckedChanged事件的菜单项和调整套模式的文本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top