Свойства пользовательского контроля в стилях - PullRequest
1 голос
/ 06 декабря 2010

У меня есть usercontrol, который предоставляет публичное свойство, подобное этому:

public Double ButtonImageHeight
{
   get { return imgButtonImage.Height; }
   set { imgButtonImage.Height = value; }
}

когда я использую этот элемент управления, я хочу иметь возможность установить это свойство через такой стиль:

<Style x:Key="MyButtonStyle" TargetType="my:CustomButtonUserControl" >
   <Setter Property="ButtonImageHeight" Value="100" />
</Style>

Что я делаю не так?

Спасибо

Ответы [ 3 ]

3 голосов
/ 06 декабря 2010

спасибо Мэтт, я только что нашел его сам, но вы были абсолютно правы ... вот точный код, который я использовал в случае, если он может помочь кому-то еще (все примеры, которые я нашел, были на WPF, silverlight просто немного отличается):

public static readonly DependencyProperty ButtonImageHeightProperty = DependencyProperty.Register("ButtonImageHeight", typeof(Double), typeof(CustomButtonUserControl),new PropertyMetadata(ButtonImageHeight_PropertyChanged ));

public Double ButtonImageHeight
{
   get { return (Double)GetValue(ButtonImageHeightProperty); }
   set { SetValue(ButtonImageHeightProperty, value); }
 }

private static void ButtonImageHeight_PropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
{
   ((CustomButtonUserControl)source).imgButtonImage.Height = (Double)e.NewValue;
}
1 голос
/ 06 декабря 2010

Свойство должно быть свойством зависимости, чтобы поддерживать стили.

0 голосов
/ 06 ноября 2013

Вы можете сделать его еще более универсальным и красивым, передав стиль для вашего imgButtonImage, чтобы вы могли установить несколько свойств. Поэтому в вашем пользовательском элементе управления добавьте свойство зависимостей, но сделайте его стилем:

public static readonly DependencyProperty UseStyleProperty =
        DependencyProperty.Register("UseStyle", typeof(Style), typeof(CustomButtonUserControl), new PropertyMetadata(UseStyle_PropertyChanged));

    public Style UseStyle
    {
        get { return (Style)GetValue(UseStyleProperty); }
        set { SetValue(UseStyleProperty, value); }
    }

    private static void UseStyle_PropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e)
    {
        ((CustomButtonUserControl)source).imgButtonImage.Style = (Style)e.NewValue;
    }

Обратите внимание, как в функции PropertyChanged я установил стиль элемента управления на новый стиль.

Затем, когда я размещаю UserControl, я могу пройти через стиль:

<Style x:Name="MyFancyStyle" TargetType="Button" >
    <Setter Property="FontSize" Value="24" />
</Style>

<controls:MyUserControl UseStyle="{StaticResource MyFancyStyle}"  />

работает и в режиме разработки VS! (Это чудо )

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