切换按钮内容绑定到其状态
本文关键字:状态 绑定 按钮 | 更新日期: 2023-09-27 18:25:29
我需要的正是这个问题已经解决了,不幸的是,它是用于Silverlight的,我无法使"交互"库发挥作用。
我有一个ToggleButton
,当它被选中时,我想将Content
属性更改为"Hello"。当它被取消选中时,它被更改为"Good bye"。在这种情况下,我不能手动更改它,因为状态的更改可以从多个来源进行。
我认为这个任务可能需要一个转换器,我已经看到了Visibility的转换器,但没有看到string的转换器。
编辑:我考虑过把这两个词都放在一个堆叠面板中,并将可见/折叠绑定到状态:
<ToggleButton.Content>
<StackPanel>
<TextBlock Text="Hello" Visibility="{Binding ...}"/>
<TextBlock Text="GoodBye"/>
</StackPanel>
</ToggleButton.Content>
您可以使用触发器:
<ToggleButton>
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Style.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value="Hello" />
</Trigger>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Content" Value="Good bye" />
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
如果要使用System.Windows.Interactivity.dll,可以在Microsoft Expression Blend软件开发工具包(SDK)中找到它(下载链接)。
您可以实现BooleanToSalutation:
public class BooleanToSalutationConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is Boolean)
{
return (bool)value ? "Hello" : "Good bye";
}
return value;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is string)
{
return ((string)value) == "Hello";
}
return value;
}
}