programatically duplicate xaml control in WP - xaml

I'm not getting how I could duplicate a XAML element pgrogramatically. For example if I define on XAML a rectangle om the middle of the screen, the user presses a button and I would like to duplicate this rectangle with all properties of it and then put it to the right of the first one, should this be possible?

Sure - just do a deep copy of the properties you want inserted and then add it to the panel. Assuming your controls are in a StackPanel with horizontal orientation:
Rectangle newRect = new Rectangle()
{
Width = oldRect.Width,
Height = oldrect.Height,
Stroke = oldRect.Stroke,
// repeat for other values you want the same
};
myStackPanel.Children.Add(newRect);

Related

VB NET What is the good way to find a position of an object inside a scrollable panel?

I have an object inside a scrollable panel, and I want to get the position of the object. Everything is okay until I have create many object inside the panel until the panel needed to be scrolled. Then I notice that the X Position of the object changed after scrolling the panel. Take a look at example image below
X Position inside a scrollable panel
I'm using Position.X to get a X Position of the object, but as you can see in the picture above. It does me no good.
Is there a way to get the actual position even if the panel is scrolled ?
UPDATE:
I have One Panel that have Auto Scroll as True , and on Button inside a Panel, let's just say the button name is Button1 and the Panel is Panel1
The Code i use to get the location of the Button1 is :
Dim msg = Button1.Location.X
msgbox(msg)
You're getting the screen position of the object, I don't know how because you didn't post your code. What you need to do is add the scroll offset, eg.
Position.X + scrollableControl.AutoScrollPosition.X

How to position tabs on a tabcontrol vb.net

VB.Net, TabStrip control,
Tabs are Align Left or Right and Top or Bottom
I need to start tabs from my own position On Top of the Tab control
Like Internet Explorer, Tabs are starting after HTTP address box, but it will cover full page and Align on the left=0.
To display right-aligned tabs
Add a TabControl to your form.
Set the Alignment property to Right.
Set the SizeMode property to Fixed, so that all tabs are the same width.
Set the ItemSize property to the preferred fixed size for the tabs. Keep in mind that the ItemSize property behaves as though the tabs were on top, although they are right-aligned. As a result, in order to make the tabs wider, you must change the Height property, and in order to make them taller, you must change the Width property.
In the code example below, Width is set to 25 and Height is set to 150.
Set the DrawMode property to OwnerDrawFixed.
Define a handler for the DrawItem event of TabControl that renders the text from left to right.
C#
public Form1()
{
// Remove this call if you do not program using Visual Studio.
InitializeComponent();
tabControl1.DrawItem += new DrawItemEventHandler(tabControl1_DrawItem);
}
private void tabControl1_DrawItem(Object sender, System.Windows.Forms.DrawItemEventArgs e)
{
Graphics g = e.Graphics;
Brush _textBrush;
// Get the item from the collection.
TabPage _tabPage = tabControl1.TabPages[e.Index];
// Get the real bounds for the tab rectangle.
Rectangle _tabBounds = tabControl1.GetTabRect(e.Index);
if (e.State == DrawItemState.Selected)
{
// Draw a different background color, and don't paint a focus rectangle.
_textBrush = new SolidBrush(Color.Red);
g.FillRectangle(Brushes.Gray, e.Bounds);
}
else
{
_textBrush = new System.Drawing.SolidBrush(e.ForeColor);
e.DrawBackground();
}
// Use our own font.
Font _tabFont = new Font("Arial", (float)10.0, FontStyle.Bold, GraphicsUnit.Pixel);
// Draw string. Center the text.
StringFormat _stringFlags = new StringFormat();
_stringFlags.Alignment = StringAlignment.Center;
_stringFlags.LineAlignment = StringAlignment.Center;
g.DrawString(_tabPage.Text, _tabFont, _textBrush, _tabBounds, new StringFormat(_stringFlags));

Not able to set the Backcolor of label as Transparent

Using properties of "label" not able to set the backcolor as transparent ... when i select the color transparent from the option which is showing some color as backcolor, if transparent works properly must show background instead of some colors. please help
If you add a control at design time when setting the background to transparent it 'displays' the background of the form not the control on which it was placed unless that control is a container such as a panel.
2 options:
1 place the label on a panel and the label then displays the panel background (which can be a picture if that is what you are trying to do)
2 place the label programatically i.e.
dim Label1 As New Label
Control.Controls.Add(Label1)
Label1.BackColor = Color.Transparent

When the frame become too small, the buttons in a panel are hidden

I use a class that extends Frame and in the constructor after defining all the propriety of the new Frame i append with the BorderLayout.SOUTH a new Panel that contains some buttons.
When I reduce the size of the Frame, if the space for the buttons isn't enough some of these disappear from the Frame.
How can I fix this problem?
public AdventureUI(Tappa tappa){
setTitle("Adventure Game");
//DIMENSIONE STANDARD DELLA FINESTRA
setSize(700,500);
setMinimumSize(new Dimension(400,300));
pannelloPrincipale = new Panel(new BorderLayout());
pannelloBottoni = new Panel();
testoTappa = new TextArea(tappa.toString(),25,50,TextArea.SCROLLBARS_NONE);
testoTappa.setEditable(false);
testoTappa.setBackground(new Color(211,211,211));
areaUtente = new TextArea("",25,30,TextArea.SCROLLBARS_VERTICAL_ONLY);
//ADD BUTTONS TO PANEL
setBottoni(pannelloBottoni,tappa.getTappeCollegate());
//AGGIUNGIAMO ELEMENTI AL PANNELLO PRINCIPALE
pannelloPrincipale.add(testoTappa,BorderLayout.CENTER);
pannelloPrincipale.add(areaUtente,BorderLayout.EAST);
//AGGIUNGIAMO PANNELLI AL FRAME
add(pannelloPrincipale,BorderLayout.CENTER);
add(pannelloBottoni,BorderLayout.SOUTH);
// ASCOLTATORE FINESTRA
addWindowListener(new AdventureUIListener());
setVisible(true);
}
Images of the problem:
As you can see the button with 26 is hidden.
As you can see the button with 26 is hidden.
Yes that is because a FlowLayout always displays components at their preferred size. If there is not enough room then the component wraps to the next line, but unfortunately the height of the panel is not increased so you don't see the button.
Check out the Wrap Layout, it was designed to handle this situation. That is it will recalculate the height of the panel so all the buttons are displayed on multiple lines. At least it works with Swing. I've never test it with AWT because most people don't use AWT anymore.

How do I get scrollbar on panel

I have a Form with a Panel. In this Panel, I want to use the vertical scrollbar when I needed.
How do I do this? I've tried setting autoscroll true and set a min scroll height, but the scrollbar never appears.
I've also tried this:
my_panel.ScrollBars = ScrollBars.Vertical
but then I get the error that scrollbar is not a member of my_panel?
Thanks.
Autoscroll property is actually enough to achieve your need. Basically a panel with autoscroll property true will display the scroll bar only when the contents/components inside that panel exceeds over its bound. In other words, Scroll bar appears with controls which have autoscroll property set to true when the particular control's contents are larger than its visible area. I think your panel is having some minimum amount of contents/controls which fits inside that panel's bound.
I know You asked this question more then year ago, but... ;)
Recently, I had same problem (label inside panel, and I need only vertical scrollbar).
If You want only vertical scrollbar of panel with label inside, use code bellow :
Dim pnl As New Panel
pnl.Size = New Size(300, 200)
pnl.AutoSize = True
Dim lbl As New Label
lbl.Location = New Point(0, 0)
lbl.AutoSize = True
lbl.MaximumSize = New Size(pnl.Width - 18, 0)
'18 is approx. width of scroller, and height must be zero.
'even if Label is set to AutoSize, MaximumSize will not allow him to
'expand more then set width.
'Height of zero px will allow Label to expand as much as he need
pnl.Controls.Add(lbl)
Me.Controls.Add(pnl)
I hope this code help You.
btw. sorry for my weak English, I hope You will understand ;) :)