2014-05-11 153 views
0

我有兩個ToggleButtons綁定ToggleButton IsChecked屬性到另一個ToggleButton不工作

我需要綁定一個IsChecked屬性到另一個ToggleButton

我使用自定義Converter來反轉該值。

但是,它不工作?這裏是我的代碼:

XAML:

<ToggleButton 
    IsChecked="{Binding Path=ToggleButton.IsChecked, ElementName=menuCatUit, 
    Converter={StaticResource InvertBool}}"/> 

<ToggleButton x:Name="menuCatUit" IsChecked="True" /> 

代碼:

[ValueConversion(typeof(bool), typeof(bool))] 
public class InverseBooleanConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (targetType != typeof(bool)) 
      throw new InvalidOperationException("The target must be a boolean"); 

     return !(bool)value; 
    } 
} 
+0

可以的,如果你想一次只 –

+0

@FlatEric不爲GUI原因的選項,以檢查其中一個不是你只是使用兩個單選按鈕。 – DeMama

+0

你的意思是元素的外觀?你可以簡單地覆蓋控制模板,並讓它看起來如何我知道 –

回答

0

找到解決方案:

我需要編輯我的converter,因爲ToggleButton使用nullable bool

[ValueConversion(typeof(bool?), typeof(bool))] 
public class InverseNullableBool : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (targetType != typeof(bool?)) 
      throw new InvalidOperationException("The target must be a nullable boolean"); 

     bool? b = (bool?)value; 
     return !(b.HasValue && b.Value); 
    } 
} 
1

從路徑屬性中刪除了 「切換按鈕」。
您只需要屬性名稱。

<ToggleButton 
    IsChecked="{Binding Path=IsChecked, ElementName=menuCatUit, 
    Converter={StaticResource InvertBool}}"/> 
0

這裏是我做的,我把它們全部發送到同一個選中和未選中事件:

privateToggleButton Toggle; 
public void ToggleButtonChecked(object sender, RoutedEventArgs e) 
    { 
     if (Toggle != null && Toggle != sender as ToggleButton) 
     { 
      Toggle.IsChecked = false; 
     } 

     Toggle = sender as ToggleButton; 
    } 

    public void ToggleButtonUnChecked(object sender, RoutedEventArgs e) 
    { 
     if (Toggle != null) 
     { 
      Toggle = null; 
     } 
    } 

然後檢查其切換按鈕被選中做這樣的事情

switch (Toggle.Name) 
       { 
        case ("Button1"): /*MyCode*/ break; 
       }; 
相關問題