2011-08-27 145 views
0

讓我給你提供更多的細節。情況是我正在處理一個用戶控件,並且我有一個依賴對象接收一個枚舉。根據值,必須顯示一個按鈕。自XAML以來,我怎樣才能顯示一個按鈕?

我的意思是:

public enum Entradas 
{ 
    Entero, Decimal 
} 

public partial class TableroUserControl : UserControl 
{ 
    public Entradas Entrada 
    { 
     get { return (Entradas)GetValue(EntradaProperty); } 
     set { SetValue(EntradaProperty, value); } 
    } 

    public static readonly DependencyProperty EntradaProperty = 
     DependencyProperty.Register("Entrada", typeof(Entradas), typeof(TableroUserControl)); 
} 

當EntradaProperty接收Entradas.Entero,它必須顯示在用戶的控制按鈕,並把小數時,必須消失的按鈕。雖然,該屬性也必須包含默認值。

我不知道是否必須在EntradaProperty中聲明PropertyMetadata對象或使用IValueConverter。

我該怎麼做?提前致謝。

回答

2

您可以創建一個IValueConverter實現來執行您所需的操作。結果將是一個System.Windows.Visibility對象;

class EntradasToVisibilityConverter : IValueConverter 
{ 
    public Object Convert(
    Object value, 
    Type targetType, 
    Object parameter, 
    CultureInfo culture) 
    { 
     // error checking, make sure 'value' is of type 
     // Entradas, make sure 'targetType' is of type 'Visibility', etc. 

     return (((Entradas)value) == Entradas.Entero) 
       ? Visibility.Visible 
       : Visibility.Collapsed; 
    } 

    public object ConvertBack(
    object value, 
    Type targetType, 
    object parameter, 
    CultureInfo culture) 
    { 
     // you probably don't need a conversion from Visibility 
     // to Entradas, but if you do do it here 
     return null; 
    } 
} 

現在,在XAML ...

<SomeParentControl.Resources> 
    <myxmlns:EntradasToVisibilityConverter x:key="MyEntradasToVisConverter" /> 
</SomeParentControl.Resources> 
<Button 
    Visibility="{Binding MyEnumValue, Converter={StaticResource MyEntradasToVisConverter}}" 
/> 
0

您可以在TableroUserControl的XAML中使用自定義IValueConverter或聲明DataTrigger

1

您可以通過元數據或由ValueConverter做到這一點。已經給出了valueConverter的示例。這裏是一個通過元數據來做的例子。

public static readonly DependencyProperty EntradaProperty = 
     DependencyProperty.Register("Entrada", typeof(Entradas), typeof(TableroUserControl), new UIPropertyMetadata((d,e)=> { ((TableroUserControl)d).EntradaPropertyChanged(e); })); 

private EntradaPropertyChanged(DependencyPropertyChangedEventArgs e){ 
    Entradas entrada=(Entradas)e.NewValue ; 
    if(entrada=Entradas.Entero) 
    // Show your control 
    }else{ 
    // Hide your control 
    } 
} 
0

如果EntradaProperty不以任何其他方式通過屬性Entrada變化比這應該工作:

public Entradas Entrada 
{ 
    get { return (Entradas)GetValue(EntradaProperty); } 
    set 
    { 
     SetValue(EntradaProperty, value); 
     if (Entrada == Entradas.Entero) 
      //show button 
     else 
      //hide button 
    } 
} 

默認值就必須另行規定,但入住日期將開始爲腸嗖展示在開始的按鈕應該工作。

相關問題