【问题标题】:ToggleButton Content binding to its stateToggleButton 内容绑定到它的状态
【发布时间】:2013-07-31 02:03:38
【问题描述】:

我需要的正是在this question 中解决,不幸的是它是针对 Silverlight 的,我无法让那个“交互性”库工作。

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

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

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

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

【问题讨论】:

  • 您可以为此使用“命令”(在 XAML 中以声明方式)
  • 您需要引用 System.Windows.Interactivity 库,并且您为 Silverlight 指定的解决方案也适用于 WPF。
  • 也可能是Microsoft.Expression.Interactions

标签: c# wpf togglebutton


【解决方案1】:

您可以使用触发器:

<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) (download link) 中找到它。

【讨论】:

  • 效果很好,但我不能使用它,因为我使用的是界面模板,如果我更改样式,则会显示默认主题。有没有办法添加这些触发器并保持当前的视觉效果?
  • @Sturm 当然是的。您应该检查 BasedOn 样式中的属性:&lt;Style BasedOn="{StaticResource tb}" TargetType="ToggleButton" &gt;
  • tb 应该是我当前模板的名称?
  • @Sturm 你当前的风格。可以贴一下这个样式吗?
【解决方案2】:

您可以实现 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;
    }
}

【讨论】:

    猜你喜欢
    • 2010-12-04
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多