Hello,
I've succesfully added buttons in the header of a UltraExpandableGroupBox with a creation filter, using the example on this site. However, now I need to have a track bar in the header. This doesn't seem to work as expected. When I add it, I can see the track bar in the header, but it doesn't repaint when I change it's value. When I drag the entire form out of the screen and back, I can see the value has actually changed.
I've tried all kinds of solutions. Refreshing / invalidating the trackbar, the element, etc. Can someone help me make this work? I would like to use the creation filter, because I already use it for adding buttons in my original project. Below is some sample code. Create an application "GroupBoxWithTrackBar" and add an UltraExpandableGroupBox to the form. Then override Form1.cs with the code below. I'm using version 10.3.20103.2145. Thanks in advance.
using System; using System.Windows.Forms; using Infragistics.Win; using Infragistics.Win.Misc; using Infragistics.Win.UltraWinEditors; namespace GroupBoxWithTrackBar { public partial class Form1 : Form { public Form1() { InitializeComponent(); } protected override void OnLoad(EventArgs e) { base.OnLoad(e); ultraExpandableGroupBox1.CreationFilter = new TrackBarCreationFilter(); } } public class TrackBarCreationFilter : IUIElementCreationFilter { private readonly UltraTrackBar TrackBar; public TrackBarCreationFilter() { TrackBar = new UltraTrackBar(); } #region IUIElementCreationFilter Members public void AfterCreateChildElements(UIElement parent) { if (!(parent is GroupBoxHeaderUIElement)) return; var rect = parent.Rect; rect.X += rect.Width - 100; rect.Width = 90; TrackBar.UIElement.Rect = rect; parent.ChildElements.Add(TrackBar.UIElement); } public bool BeforeCreateChildElements(UIElement parent) { return false; } #endregion } }
It may not be possible to make this work. You could try calling DirtyChildElement on the trackbar UIElement. But there maybe be other factors that the element needs in order to function, or internal members that have to be dirtied which you do no have access to.
Why not simply position an UltraTrackBar control over the header instead?
Mike Saltzman said:You could try calling DirtyChildElement on the trackbar UIElement.
Mike Saltzman said:Why not simply position an UltraTrackBar control over the header instead?
The same could be said for adding buttons, but this was suggested in this thread. Furthermore, like I said, I already have buttons added using a creation filter in my project, so it would be nice if I could keep the code consistent. But if it's not possible, then I will have to do it the way you suggested.
Thanks.
Thanks for sorting this out. I would like to use the approach of placing an UltraTrackBar control in the group box itself. However, now I face two problems.
1. Because the Track Bar is a child of UltraExpandableGroupBox, determing the location is problematic because I need the location relative to GroupBoxHeaderUIElement. Maybe I could try something with PointToScreen and PointToClient, but UIElements don't support that.
2. If I want to position the track bar on the header, it will actually be placed outside the UltraExpandableGroupBoxPanel and won't get drawn.
Or maybe I misunderstood your suggestion. In that case, could you point me in the right direction, perhaps with some sample code? Please bear in mind that in our original project, we create UltraExpandableGroupBoxes in code on the fly. So I would prefer not to add track bars to the parents of group boxes, unless we can control everything from within the group box or creation filter. Thanks!
After deep investigation of this issue, the only way which I found in order to achieve your goal is to configure your own composite control which behalves a UltraExpandableGroupBox. I’ve implemented this in a simple demonstrative sample, please see attached sample. There is some odd issue with the designer wit this approach, but it is only in design time.
I hope that this will helps you.
Yes, I think this is the way to go in that case. Why did you use an UltraGroupBox and created the expansion logic by yourself. Wouldn't it be easier to add an UltraExpandableGroupBox to the user control?
I will try to use this approach in our project. If I encounter any issues, I will post them here. Thanks for your help!
I am just checking about the progress of this issue. Let me know if you need our further assistance on it.
Thank you for using Infragistics Components.
Unfortunately, I did not have time to try it out in our project yet. But as I mentioned, if I encounter any issues, I will post them here. Thanks!
Thank you for your feedback!
Feel free to update the thread if you have any questions.