如何将TextBox的TextWrapping属性绑定到MenuItem的IsChecked值? [英] How do you bind the TextWrapping property of a TextBox to the IsChecked value of a MenuItem?
问题描述
TextBox的TextWrapping属性有三个可能的值:
The TextWrapping property of the TextBox has three possible values:
- 包装
- NoWrap
- WrapWithOverflow
我想绑定到MenuItem的IsChecked属性。如果MenuItem被选中,我想将TextBox的TextWrapping属性设置为Wrap。如果没有选中MenuItem,我想将TextBox的TextWrapping属性设置为NoWrap。
I would like to bind to the IsChecked property of a MenuItem. If the MenuItem is checked, I want to set the TextWrapping property of a TextBox to Wrap. If the MenuItem is not checked, I want to set the TextWrapping property of the TextBox to NoWrap.
总而言之,我试图绑定一个具有两个状态的控件到具有两个以上值的枚举的两个值。
To sum up, I am trying to bind a control that has two states to two values of an enumeration that has more than two values.
如果可能,我想在XAML中完成此操作。
[edit] I would like to accomplish this in XAML, if possible.
我想到了如何使用IValueConverter来做到这一点。也许有更好的办法呢?这是我做的:
[edit] I figured out how to do this using an IValueConverter. Perhaps there is a better way to do this? Here is what I did:
在Window.Resources中,我声明了对我的ValueConverter的引用。
In Window.Resources, I declared a reference to my ValueConverter.
<local:Boolean2TextWrapping x:Key="Boolean2TextWrapping" />
在我的TextBox中,我创建了一个与MenuItem的绑定,并将Converter包含在binding语句中。 / p>
In my TextBox, I created the binding to a MenuItem and included the Converter in the binding statement.
TextWrapping="{Binding ElementName=MenuItemWordWrap, Path=IsChecked, Converter={StaticResource Boolean2TextWrapping}}"
,ValueConverter如下所示:
and the ValueConverter looks like this:
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 。
If you want to do this all in xaml you need to use a Style and 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>
这篇关于如何将TextBox的TextWrapping属性绑定到MenuItem的IsChecked值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!