Как я могу показать кнопку с XAML? - PullRequest
0 голосов
/ 27 августа 2011

Позвольте мне предоставить вам более подробную информацию. Ситуация такова, что я работаю над пользовательским элементом управления, и у меня есть объект зависимости, который получает перечисление. В зависимости от значения, должна отображаться кнопка или нет.

Я имею в виду:

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, он должен показывать кнопку в пользовательском элементе управления, а при вводе десятичной дроби кнопка должна исчезать Хотя свойство также должно содержать значение по умолчанию.

Я не знаю, нужно ли объявлять объект PropertyMetadata в EntradaProperty или использовать IValueConverter.

Как я могу это сделать? Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 27 августа 2011

Вы можете создать 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}}"
/>
1 голос
/ 27 августа 2011

Вы можете сделать это либо с помощью метаданных, либо с помощью 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 голосов
/ 27 августа 2011

Если EntradaProperty не изменяется каким-либо иным образом, кроме как через свойство Entrada, это должно работать:

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

значение по умолчанию должно быть указано в другом месте, но Entradas запустится, когда Entero sou будет показывать кнопку в начале.

0 голосов
/ 27 августа 2011

Вы можете использовать свой пользовательский IValueConverter или объявить DataTrigger в XAML TableroUserControl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...