windowsforms-4905-controls-and-libraries-navigation-controls-navigation-bar-examples-appearance-how-to-custom-paint-links.md
The following sample code handles the NavBarControl.CustomDrawLink event to custom paint links. Links are painted differently in the hot tracked and pressed states.
The image below shows a custom painted hot tracked link:
private void navBarControl1_CustomDrawLink(object sender, DevExpress.XtraNavBar.ViewInfo.CustomDrawNavBarElementEventArgs e) {
if (e.ObjectInfo.State == ObjectState.Hot || e.ObjectInfo.State == ObjectState.Pressed) {
LinearGradientBrush brush;
NavLinkInfoArgs linkInfo = e.ObjectInfo as NavLinkInfoArgs;
if (e.ObjectInfo.State == ObjectState.Hot) {
brush = new LinearGradientBrush(e.RealBounds, Color.Orange, Color.PeachPuff,
LinearGradientMode.Horizontal);
}
else
brush = new LinearGradientBrush(e.RealBounds, Color.PeachPuff, Color.Orange,
LinearGradientMode.Horizontal);
using (brush) {
e.Cache.FillRectangle(Brushes.OrangeRed, e.RealBounds);
Rectangle rect = e.RealBounds;
rect.Inflate(-1, -1);
e.Cache.FillRectangle(brush, rect);
if (e.Image != null) {
Rectangle imageRect = linkInfo.ImageRectangle;
imageRect.X += (imageRect.Width - e.Image.Width) / 2;
imageRect.Y += (imageRect.Height - e.Image.Height) / 2;
imageRect.Size = e.Image.Size;
e.Cache.DrawImageUnscaled(e.Image, imageRect);
}
e.Appearance.DrawString(e.Cache, e.Caption, linkInfo.RealCaptionRectangle, Brushes.White);
e.Handled = true;
}
}
}
Private Sub NavBarControl1_CustomDrawLink(sender As Object, e As CustomDrawNavBarElementEventArgs) Handles NavBarControl1.CustomDrawLink
If e.ObjectInfo.State = ObjectState.Hot OrElse e.ObjectInfo.State = ObjectState.Pressed Then
Dim brush As LinearGradientBrush
Dim linkInfo As NavLinkInfoArgs = TryCast(e.ObjectInfo, NavLinkInfoArgs)
If e.ObjectInfo.State = ObjectState.Hot Then
brush = New LinearGradientBrush(e.RealBounds, Color.Orange, Color.PeachPuff, LinearGradientMode.Horizontal)
Else
brush = New LinearGradientBrush(e.RealBounds, Color.PeachPuff, Color.Orange, LinearGradientMode.Horizontal)
End If
Using brush
e.Cache.FillRectangle(Brushes.OrangeRed, e.RealBounds)
Dim rect As Rectangle = e.RealBounds
rect.Inflate(-1, -1)
e.Cache.FillRectangle(brush, rect)
If e.Image IsNot Nothing Then
Dim imageRect As Rectangle = linkInfo.ImageRectangle
imageRect.X += (imageRect.Width - e.Image.Width) / 2
imageRect.Y += (imageRect.Height - e.Image.Height) / 2
imageRect.Size = e.Image.Size
e.Cache.DrawImageUnscaled(e.Image, imageRect)
End If
e.Appearance.DrawString(e.Cache, e.Caption, linkInfo.RealCaptionRectangle, Brushes.White)
e.Handled = True
End Using
End If
End Sub