开发者

Usercontrol properties in Styles

开发者 https://www.devze.com 2023-01-29 06:19 出处:网络
I have a usercontrol that expose a public property like this开发者_JAVA技巧 : public Double ButtonImageHeight

I have a usercontrol that expose a public property like this开发者_JAVA技巧 :

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

when I use that control, I want to be able to set that property throught a Style like that :

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

What am I doing wrong?

Thanks


thanks Matt, I just found it myself but you were absolutely right... here's the exact code I used in case it can help someone else (all the examples I found were on WPF, silverlight is just slightly different) :

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;
}


The property needs to be a dependency property in order to support styles.


You can make it even more generic and nice by passing through a Style for your imgButtonImage, that way you can set multiple properties. So within your user control add the dependency property, but make it a Style:

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;
    }

Notice how within the PropertyChanged function I set the style of the control to the new style.

Then when I host the UserControl I can pass through the style:

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

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

works in VS design mode too! (It's a miracle)

0

精彩评论

暂无评论...
验证码 换一张
取 消