Taufiq Abdur Rahman
Taufiq Abdur Rahman

Reputation: 1388

Add Usercontrol To A Canvas

I have seen may examples one of them been Add WPF control at runtime Seem this solution has work for a lot of people. What the hell am I doing wrong? My Label won't Show on the canvas.

Label l = new Label();
l.Background = new LinearGradientBrush(Colors.Black, Colors.Black, 0);
canBackArea.Children.Add(l);
l.Visibility = System.Windows.Visibility.Visible;
l.Content = "Hello";
Canvas.SetLeft(l,20); 
Canvas.SetTop(l, 20);
Canvas.SetZIndex(l, lableList.Count);

Canvas Has a white color, Thus the Background. canBackArea is a Canvas

XML CODE

    <ScrollViewer Grid.Row="2" HorizontalScrollBarVisibility="Visible">
        <Canvas Name="canBackArea"
                Width="500"
                Height="300"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                Background="White"
                MouseMove="canBackArea_MouseMove">
            <telerik:RadContextMenu.ContextMenu>
                <telerik:RadContextMenu Name="mnuBack"
                                        ItemClick="ContextMenu_ItemClick"
                                        Opened="mnuBack_Opened">
                    <telerik:RadMenuItem Name="mBackground" Header="Set Background Image" />
                    <telerik:RadMenuItem Name="mSize" Header="Set Size" />
                    <telerik:RadMenuItem Name="mLable" Header="Add Text" />
                    <telerik:RadMenuItem Name="mChangeText" Header="Change Text" />
                </telerik:RadContextMenu>
            </telerik:RadContextMenu.ContextMenu>
            <Image Name="imgBackground" />
        </Canvas>
    </ScrollViewer>

After Add a lot of labels.

Upvotes: 1

Views: 4338

Answers (4)

Taufiq Abdur Rahman
Taufiq Abdur Rahman

Reputation: 1388

The Problem was i was using styles and it is some how over writing my lable, i replaced it with textbox and every thing seems fine....

Upvotes: 0

Steven Yates
Steven Yates

Reputation: 2480

using your xaml and this

private void mnuBack_ItemClick(object sender, Telerik.Windows.RadRoutedEventArgs e)
    {
        Label l = new Label();

        canBackArea.Children.Add(l);
        l.Visibility = System.Windows.Visibility.Visible;
        l.Content = "Hello";
        Canvas.SetLeft(l, 20);
        Canvas.SetTop(l, 20);
        Canvas.SetZIndex(l, lableList.Count);
        lableList.Add(l);
    }

I can add labels

Upvotes: 0

Harsh Baid
Harsh Baid

Reputation: 7249

I have tried to reproduce your issue and I suspect the possible issues should be that

  • No Foreground color is set to Label controls.
  • zIndex should be more than any other children controls I think as Canvas.SetZIndex(l, canBackArea.Children.Count);

Below is what I have tried and tested.

XAML Code

<Window x:Class="TestApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="50" />
            <RowDefinition Height="269*" />
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal">
            <Label Content="New Label Content" Height="30" />
            <TextBox x:Name="txtLabelContent" Width="200" Height="30"></TextBox>
            <Button Margin="10 0 0 0" Height="30" Width="70" Click="Button_Click">Add Label</Button>
        </StackPanel>
        <Canvas Grid.Row="1" x:Name="canBackArea" Background="White" Grid.RowSpan="2">
        </Canvas>
    </Grid>
</Window>

Window code-behind

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace TestApplication
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Label l = new Label();
            l.Background = new LinearGradientBrush(Colors.Black, Colors.Black, 0);
            l.Foreground = new LinearGradientBrush(Colors.White, Colors.White, 0);
            canBackArea.Children.Add(l);
            l.Visibility = System.Windows.Visibility.Visible;
            l.Content = txtLabelContent.Text;
            Canvas.SetLeft(l, 20);
            Canvas.SetTop(l, 20);
            Canvas.SetZIndex(l, canBackArea.Children.Count);
        }
    }
}

Upvotes: 0

Steven Yates
Steven Yates

Reputation: 2480

This is my MainWindow.xaml

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Canvas x:Name="canBackArea">

</Canvas>

and this is my codebehind.

 public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        Label l = new Label();

        canBackArea.Children.Add(l);
        l.Visibility = System.Windows.Visibility.Visible;
        l.Content = "Hello";
        Canvas.SetLeft(l, 20);
        Canvas.SetTop(l, 20);
    }

This works perfectly fine.

https://i.sstatic.net/b1mHi.png

It could depend on the context your using it in?

Upvotes: 1

Related Questions