2013-03-27 50 views
0

我在XAML四象:如何設置能見度倒塌圖像時,一個可見

<Image Visibility="Collapsed" Name="LeftArrow" Height="20" Width="20"></Image> 
<Image Visibility="Collapsed" Name="RightArrow" Height="20" Width="20"></Image> 
<Image Visibility="Collapsed" Name="TopArrow" Height="20" Width="20"></Image> 
<Image Visibility="Collapsed" Name="BottomArrow" Height="20" Width="20"></Image> 

在我的代碼隱藏我已經使所有其他的圖片倒塌當一個開關的情況下他們是這樣的可見:

switch (ElementInfoCollection[pos].ArrowDirection) 
{ 
    case ArrowDirection.Left: 
     LeftArrow.Visibility = Visibility.Visible; 
     RightArrow.Visibility = Visibility.Collapsed; 
     TopArrow.Visibility = Visibility.Collapsed; 
     BottomArrow.Visibility = Visibility.Collapsed; 
     break; 
    case ArrowDirection.Right: 
     LeftArrow.Visibility = Visibility.Collapsed; 
     RightArrow.Visibility = Visibility.Visible; 
     TopArrow.Visibility = Visibility.Collapsed; 
     BottomArrow.Visibility = Visibility.Collapsed; 
     break; 
    case ArrowDirection.Top: 
     LeftArrow.Visibility = Visibility.Collapsed; 
     RightArrow.Visibility = Visibility.Collapsed; 
     TopArrow.Visibility = Visibility.Visible; 
     BottomArrow.Visibility = Visibility.Collapsed; 
     break; 
    case ArrowDirection.Bottom: 
     LeftArrow.Visibility = Visibility.Collapsed; 
     RightArrow.Visibility = Visibility.Collapsed; 
     TopArrow.Visibility = Visibility.Collapsed; 
     BottomArrow.Visibility = Visibility.Visible; 
     break; 
    default: 
     LeftArrow.Visibility = Visibility.Collapsed; 
     RightArrow.Visibility = Visibility.Collapsed; 
     TopArrow.Visibility = Visibility.Collapsed; 
     BottomArrow.Visibility = Visibility.Collapsed; 
     break; 
} 

顯然,這是一個相當愚蠢的方式做到這一點,所以我想知道我怎樣才能使時,其中一個被設置爲可見的代碼隱藏圖像崩潰?這是我想出迄今:

<UserControl.Resources> 
    <Style x:Key="ArrowSwitch" TargetType="{x:Type Image}"> 
     <Style.Triggers> 
      <DataTrigger > 
       <Setter Property="Image.Visibility" Value="Collapsed"></Setter> 
      </DataTrigger> 
      <DataTrigger> 
       <Setter Property="Image.Visibility" Value="Visible"></Setter> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</UserControl.Resources> 
+0

您使用的是MVVM模式嗎? – Dave 2013-03-27 09:07:04

+0

不,我不知道。在我的情況下不需要MVVM – 2013-03-27 09:08:32

+0

如果'ElementInfoCollection [pos] .ArrowDirection'可以作爲視圖類中的依賴項屬性被隔離,那麼可以使用'IValueConverter'綁定'ArrowDirection'到''Visibility'的轉換。 – 2013-03-27 09:16:22

回答

3

這是相同的代碼,但更短:

switch (ElementInfoCollection[pos].ArrowDirection) 
{ 
    LeftArrow.Visibility = Visibility.Collapsed; 
    RightArrow.Visibility = Visibility.Collapsed; 
    TopArrow.Visibility = Visibility.Collapsed; 
    BottomArrow.Visibility = Visibility.Collapsed; 

    case ArrowDirection.Left: LeftArrow.Visibility = Visibility.Visible; break; 
    case ArrowDirection.Right: RightArrow.Visibility = Visibility.Visible; break; 
    case ArrowDirection.Top: TopArrow.Visibility = Visibility.Visible; break; 
    case ArrowDirection.Bottom: BottomArrow.Visibility = Visibility.Visible; break; 
    default: break; 
} 
+1

當然x |非常簡單的解決方案!謝謝! – 2013-03-27 09:15:59

1

如果你想使用數據綁定,您可以利用映射轉換器該ArrowDirection的能見度值:

public class DirectionVisibilityConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     ArrowDirection target; 
     ArrowDirection current; 
     try 
     { 
      current = (ArrowDirection)value; 
     } 
     catch (Exception) 
     { 
      return null; 
     } 
     if (Enum.TryParse(parameter.ToString(), out target)) 
     { 
      if (current == target) 
       return Visibility.Visible; 
      else 
       return Visibility.Collapsed; 
     } 
     return null; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

而在XAML中使用它,如:

<Window.Resources> 
    <local:DirectionVisibilityConverter x:Key="VisibilityConverter"/> 
</Window.Resources> 
.... 
<Image Visibility="{Binding ArrowDirection, Converter={StaticResource VisibilityConverter}, ConverterParameter=Left}" .../> 

其中ArrowDirection指定ElementInfoCollection[pos].ArrowDirection的綁定路徑。如果它實現了INotifyPropertyChanged,您只需要將該值設置爲正確的方向,並且可見性將被更新。