2

我需要在这个问题中得到解决,不幸的是它是针对 Silverlight 的,我无法使“交互”库工作。

我有一个ToggleButton,当它被选中时,我想将Content属性更改为“Hello”,当它未选中时,“再见”。在这种情况下,手动更改它不是我的选择,因为状态的更改可以从多个来源完成。

我认为这个任务可能需要一个转换器,我已经看到转换器到可见性而不是字符串。

编辑:我考虑过将这两个词放在一个堆栈面板中,并将可见性 Visible/Collapsed 绑定到状态:

         <ToggleButton.Content>
          <StackPanel>
              <TextBlock Text="Hello" Visibility="{Binding ...}"/>
              <TextBlock Text="GoodBye"/>
          </StackPanel>
      </ToggleButton.Content>
4

2 回答 2

5

您可以使用触发器:

<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) 中找到它(下载链接)。

于 2013-07-30T17:51:35.690 回答
1

你可以实现一个 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;
    }
}
于 2013-07-30T17:51:33.573 回答