2009-10-14 104 views
1

我有2個擴展器並排。 一次只能打開1個。WPF擴展器觸發器

我要爲他們寫觸發器直接在他們的定義這樣的:

<Expander x:Name="MenuOverView" ExpandDirection="Left">     
       <Expander.Triggers> 
        <Trigger Property="IsExpanded" Value="False" SourceName="MenuDetailed"> 
           <Setter Property="IsExpanded" Value="True" TargetName="MenuOverView" /> 
        </Trigger> 
       </Expander.Triggers> 
</Expander> 

<Expander x:Name="MenuDetailed" ExpandDirection="Right">     
       <Expander.Triggers> 
        <Trigger Property="IsExpanded" Value="False" SourceName="MenuOverView"> 
           <Setter Property="IsExpanded" Value="True" TargetName="MenuDetailed" /> 
        </Trigger> 
       </Expander.Triggers> 
    </Expander> 

當然,這是一個糟糕的代碼.. 我怎麼能這樣做嗎?

回答

3

好的我認爲那是不可能的。 我在這種情況下,提供了一個解決方案:

<!--Add this to the resources dictionary--> 
<conv:BoolInverterConverter x:Key="boolInvertorConverter" /> 

...

<Expander x:Name="MenuOverView" ExpandDirection="Left" 
         IsExpanded="{Binding ElementName=MenuDetailed, Converter={StaticResource boolInvertorConverter}, Path=IsExpanded}"      
         VerticalContentAlignment="Center" > 

...

和我公司提供的轉換代碼:

public class BoolInverterConverter : System.Windows.Data.IValueConverter 
     { 
      #region IValueConverter Members 

      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
      { 
       bool i; 
       if (bool.TryParse(value.ToString(), out i) == false) return null;    

       return !i; 
      } 

      public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
      { 
       bool i; 
       if (bool.TryParse(value.ToString(), out i) == false) return null; 

       return !i; 
      } 

      #endregion 
     } 

享受!