wpf - 如何将 TextBox 的 TextWrapping 属性绑定(bind)到 MenuItem 的 IsChecked 值?

标签 wpf binding enums checkbox word-wrap

TextBox 的 TextWrapping 属性具有三个可能的值:

  • 包裹
  • NoWrap
  • WrapWithOverflow

  • 我想绑定(bind)到 MenuItem 的 IsChecked 属性。如果选中了 MenuItem,我想将 TextBox 的 TextWrapping 属性设置为 Wrap。如果未选中 MenuItem,我想将 TextBox 的 TextWrapping 属性设置为 NoWrap。

    总而言之,我试图将具有两个状态的控件绑定(bind)到具有两个以上值的枚举的两个值。

    [编辑] 如果可能,我想在 XAML 中完成此操作。

    [编辑] 我想出了如何使用 IValueConverter 来做到这一点。也许有更好的方法来做到这一点?这是我所做的:

    在 Window.Resources 中,我声明了对我的 ValueConverter 的引用。
    <local:Boolean2TextWrapping x:Key="Boolean2TextWrapping" />
    

    在我的 TextBox 中,我创建了与 MenuItem 的绑定(bind),并将 Converter 包含在绑定(bind)语句中。
    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 中完成这一切,你需要使用 StyleDataTrigger .

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

    关于wpf - 如何将 TextBox 的 TextWrapping 属性绑定(bind)到 MenuItem 的 IsChecked 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/250840/

    相关文章:

    c# - 另一个类中的 WPF 事件处理程序

    c# - 哪个运行时性能更快 : WPF or Winforms?

    qt - 将 Qt 绑定(bind)到 LLVM

    xaml - DataBound 列表框中 ListPicker 的 DataContext 问题

    java - Scala 枚举可以像 Java 一样映射到整数吗?

    C++抛硬币困惑

    wpf - 如何更改 wpf 中按钮的内容 "color"

    binding - 调用 ko.applyBindings 后添加绑定(bind)

    enums - Enum导出trait Copy时的 "trait Clone is is not implemented"

    c# - 在 SQL Server Express 2008 中是否有任何机制来保护我的 .mdf 文件?