2013-07-30 102 views
2

我需要的確切是在this question解決,不幸的是它是用於Silverlight,我無法使「交互性」庫工作。ToggleButton內容綁定到其狀態

我有一個ToggleButton,我想在未選中的情況下選中「Good Bye」時將Content屬性更改爲「Hello」。在這種情況下手動更改它不是我的選擇,因爲狀態的更改可以從多個來源完成。

我認爲這個任務可能需要一個轉換器,我已經看到轉換器可見性但不能串。

編輯:我已經想過把兩個詞在一個StackPanel和開關能見度可見/摺疊束縛的狀態:

  <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

你可以使用Triggers:

<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軟件開發工具包(SDK)(download link)中找到它。

+0

這很好,但我不能使用它,因爲我使用的是界面模板,如果我改變了風格,默認的主題顯示。有沒有辦法添加這些觸發器並保持當前的視覺效果? – Sturm

+0

@Sturm當然是。您應該在Style中檢查'BasedOn'屬性:'