2010-12-06 2 views
1

У меня есть UserControl, что разоблачать общественную собственность, как это: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> 

Что я делаю неправильно?

Благодаря

+1

Показать xaml, где вы фактически размещаете UserControl в другом и как вы назначаете ему стиль. – AnthonyWJones 2010-12-06 14:16:40

ответ

1

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

3

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

вы можете сделать его еще более универсальным и хорошо, проходя через стиль для 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 тоже! (Это miracle)

Смежные вопросы