How to programmatically remove content from Xamarin.Forms ScrollView? - xamarin.forms

On a content page I have a scrollview into which from code-behind I add a grid and content to the grid. I want to remove the previously added content on tap of a button and add new content.
<ScrollView Grid.Row="3" x:Name="frequencyView">
</ScrollView>
In code behind I have
var grid = new Grid();
grid.Rowdefinitions.Add(...)
grid.Children.Add(.. another view..)
frequencyView.Content = grid;
However even if I run
grid.children.clear() the previously added content is not removed from the view. I have tried Page.ForceLayout() and frequencyView.ForceLayout() after removing the children from the grid. Setting frequencyView.Content = null has no effect.
How do I remove previously added content from the scrollview?

Usually you should not remove UI objects from your layout. You should create your layout then hide / show controls...

Related

How to create an overflow menu (not on the toolbar) - Xamarin.Forms

I understand how to create a ToolbarItem and set it's Order equal to Secondary which will give me an overflow menu like so:
But I'm not sure how I could implement such a menu in other parts of my application. For instance in the app I'm currently working on, I've removed the toolbar and created my own meaning there is no way to set the ToolbarItems property. I can add a ImageButton for the 3 dots overflow menu icon but I cannot get it to display a menu like the out of the box implementation does.
I'd also like to use this in other parts of my app (not just on the toolbar) such as on some sort of CardView.
Has anyone dealt with this problem before?
You can use Absolute layout to achieve this:
<AbsoluteLayout>
<StackLayout RowSpacing="0" AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All">
<!--Main Content of the screen-->
</StackLayout>
<BoxView Color="Gray" AbsoluteLayout.LayoutBounds="1,0,250,250" AbsoluteLayout.LayoutFlags="PositionProportional" />
</AbsoluteLayout>
In the above code I have used a BoxView of Gray background for that menu toolbar to just show a demo, you can implement your view and set the width and height accordingly and make that view visible on click of icon which you will add on the toolbar.
Output:
This can be easily achieved using AbsoluteLayout in Xamarin.Forms
https://learn.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/absolute-layout
https://xamgirl.com/absolutelayout-in-xamarin-made-simple/

How can I exchange an item and a spacer?

In qt, I have a form that contains among other things, a group with
A combo box
a checkbox
a spacer
a button
Based on some logic, I want sometimes to show another combo box... Where the spacer is, but smaller.
When I add it though, everything resizes automatically
I don't see a way to make it invisible, and yet keep items of the same size when I make it visible again.
I tried making it fixed size... But unless I use fixed sizes and positioning for everything, which I think is a bad idea, the items still move around when I change visibility.
It seems silly... But how can I make my little combo box show up instead of the spacer not next to it ? Spacers don't seem to have a name...
I would do
combo.setVisible(condition);
Spacer.setVisible(!condition);
Very easy... Except how do I access the spacer from code ?
My suggestion is to use a container QWidget instead of the spacer. Here is how it will look:
A combo box
a checkbox
a widget-container
a button
Widget-container is a QWidget with fixed size. Put your combo-box there and it will maintain it's size when you show/hide the combo-box.
Regarding your question (You will not need it but just to know in the future):
how do I access the spacer from code
You can create a spacer from code like this:
QSpacerItem* spacer = new QSpacerItem(0, 15, QSizePolicy::Fixed, QSizePolicy::Fixed);
layout->addItem(spacer);
...
Also you can get it from a layout if you know its index:
QLayoutItem* item = layout->itemAt(index);
But there is no such method as show/hide for layout items.

Issues with ASP>NET devexpress grid height

I am using a devexpress gridview with editform template. My issue is I have many rows within a grid, so when I edit rows at the bottom of a page, the edit form goes below the screen and I have to scroll down to see the whole edit form. Is there a way to set this grid to auto height so I dont have to scroll down. Also the vertical scroll bar is always displayed even if I make it false.
You can use PopUpEditForm So That You Dont have To ScrollDown On The Screen And It appears in the middle of the screen itself.
You can use the following settings for the PopupEditForm for your grid
<SettingsEditing EditFormColumnCount="2" Mode="PopupEditForm" PopupEditFormWidth="800px"
PopupEditFormHeight="320px" PopupEditFormVerticalAlign="Below" PopupEditFormHorizontalAlign="Center"
PopupEditFormAllowResize="false" />
PopupEditFormWidth,PopupEditFormHeight - You can change it to any size you want so that all your controls are properly placed.

How to build a Flex FormItem with an image button in the label section?

I want to build a flex FormItem extension that adds a button into the item label section, such that there is both a text label and, to the right of it, a button that uses an image icon:
A form item http://img830.imageshack.us/img830/4411/screenshot20100730at331.png
Basically, I want to create that 'i' icon, such that I can click on it to display a help overlay for the item in question.
Is there an existing component that does this? If not, how do I do it?
Try to use grid, gridrow, and grititem, like the html table. and add the label and the "i" image into a horizontal layout container inside the griditem.
See
http://kennethsutherland.com/2009/05/27/formitem-adding-an-icon/

Adding Scrollbar to JList

I'm trying to add a scrollbar to a JList (which uses a custom data model). Adding a JScrollPane actually hides the JList, instead of adding a scrollbar. When I run the code with the scrollbar, the JList is not visible, and I cannot see the data.
playlistField = new JList(playlist); // playlist is a data model
playlistField.setLocation(32, 220-36);
playlistField.setSize(350,120);
playlistField.setVisible(true);
this.add(playlistField);
listScrollPane = new JScrollPane(playlistField, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
Commenting out the listScrollPane = ... line makes the JList visible again and it works as expected.
What did I miss?
You need to add the scrollpane to the container, and not the list.
In your current example, by adding the list in the scrollpane, it removes the list from its original container, since a component can have only one parent.

Resources