I am trying to style a ButtonUIElement like this:
ButtonUIElement elementToAdd = new ButtonUIElement(parent);
elementToAdd.BorderStyle = UIElementBorderStyle.Raised;
but I get a "specificed method is not supported".
I also created a new Appearance object and styled the border and made the button's appearance use this object but I see no effects.
When I create a new ButtonUIElement, it's a flat grey rectangle. How can I make it look like a real button?
I assume you are adding this element into a control using a CreationFilter. In order to style the button element, what you would have to do is derive your own class from ButtonUIElement and override the InitAppearance method.
Alternately, you could use a DrawFilter and set the properties on the AppearanceData for your element there.
Thanks. My button is using the class below and I still see no borders.
internal class MyButtonUIElement : ButtonUIElement { public MyButtonUIElement(UIElement parent) : base(parent) { } protected override void InitAppearance(ref AppearanceData appearance, ref AppearancePropFlags requestedProps) { base.InitAppearance(ref appearance, ref requestedProps); appearance.BorderColor = Color.Red; appearance.BackColor2 = Color.DarkSeaGreen; } }
You might also have to override BorderStyle and/or BorderSides on the element.
Hi Mike. None of this makes sense as no matter whether you use either of a DrawFilter or a derived class, the ButtonStyle property of the ButtonUIElement class is readonly. Therefore how can you change it?
You have to override it on your derived element class.
I must be missing something here Mike. If I create a class which inherits ButtonUIElement and then I try to override the ButtonStyle property so that it is both readable and writable then I get a compiler error stating "'Public Overrides Property ButtonStyle() As Infragistics.Win.UIElementButtonStyle' cannot override 'Public Overridable ReadOnly Property ButtonStyle() As Infragistics.Win.UIElementButtonStyle' because they differ by 'ReadOnly' or 'WriteOnly'".
Actually, I've worked it out now (d'oh). You override the property as readonly and you expose the ability to change the ButtonStyle through a different property or method. For example:
Imports Infragistics.WinImports Infragistics.Win.UltraWinGrid
Public Class TimeEntryNavButton Inherits ButtonUIElement
Public Property StyleOfButton() As Infragistics.Win.UIElementButtonStyle Get Return _ButtonStyle End Get Set(ByVal value As Infragistics.Win.UIElementButtonStyle) _ButtonStyle = value End Set End Property
Public Overrides ReadOnly Property ButtonStyle() As Infragistics.Win.UIElementButtonStyle Get Return _ButtonStyle End Get End Property
End Class
Perfect! Thanks for the super-fast reply!
Hi,
There are a number of ways to do this. If you never want the button to draw themed, then the simplest thing to do is override the DrawTheme method and return false.
QUOTING: "My guess is that your button is being drawing using OS Themes. You have to set UseOsThemes on the control to False to turn off themes."
How do you set UseOsThemes to FALSE for a class derived from ButtonUIElement? I cannot figure this out.
You are right! Thank you for your answer!!
My guess is that your button is being drawing using OS Themes. You have to set UseOsThemes on the control to False to turn off themes.