2013-07-30 4 views
2

Мне нужно точно было решено в this question, к сожалению, для Silverlight я не смог заставить библиотеки «Интерактивность» работать.ToggleButton Содержимое, связанное с его состоянием

У меня есть ToggleButton, и я хочу изменить свойство Content на «Привет», когда он проверяется «До свидания», когда он не установлен. В этом случае изменение вручную не является для меня вариантом, так как изменение состояния может быть выполнено из нескольких источников.

Я думаю, что для этой задачи может понадобиться конвертер, и я видел конвертеры для видимости, но не для строки.

EDIT: Я думал о вводе оба слова в StackPanel и включите видимость Visible/Collapsed привязанными к государству:

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

Вы можете использовать «Команды» для этого (декларативно в XAML) –

+2

Вам нужна ссылка на библиотеку System.Windows.Interactivity, и это решение, указанное вами для Silverlight, будет работать и в WPF. – Nitesh

+0

И, вероятно, 'Microsoft.Expression.Interactions' тоже – Vanlalhriata

ответ

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; 
    } 
} 
3

You могут использоваться Триггеры:

<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.Interactiv ity.dll вы можете найти его в Microsoft Expression Blend Software Development Kit (SDK) (download link).

+0

Это отлично работает, но я не могу его использовать, потому что я использую шаблон интерфейса, и если я изменяю стиль, отображается тема по умолчанию. Есть ли способ добавить эти триггеры и поддерживать текущие визуальные эффекты? – Sturm

+0

@Sturm да, конечно. Вы должны проверить свойство 'BasedOn' в стиле:'