2014-01-04 1 views
2

У меня проблема с отображением пользовательского UserControls в моем ListBox программно. Я просто не могу понять, что не так. Элемент списка отображается без изображения или текста.Пользовательский UserControl не отображается в ListBox

Мой проект состоит из:

  • MainWindow.xaml
  • MainWindow.xaml.cs
  • cvMenuItem.xaml
  • cvMenuItem.xaml.cs

Кодекс MainWindow. xaml.cs

private void cvMenuItem_MouseLeftButtonUp_1(object sender, MouseButtonEventArgs e) 
{ 
    lstContacts.Items.Clear(); 

    cvMenuItem test = new cvMenuItem("test", 
     Environment.GetEnvironmentVariable("USERPROFILE") + @"\Downloads\images.jpg"); 

    lstContacts.Items.Add(test); 
} 

Кодекс cvMenuItem.xaml.cs

public partial class cvMenuItem : UserControl 
{ 
    public cvMenuItem() 
    { 
     InitializeComponent(); 
    } 

    public cvMenuItem(string text, string Logo) 
    { 
     this.Height = 50; 
     this.Width = 186; 
     txtService = new TextBlock() { Width = 100, Height = 50 }; 
     imgLogo = new Image() { Width = 50, Height = 50 }; 

     //Just found out, adding the objects as childeren partially works 
     this.AddChild(imgLogo); 
     //But I can't add txtService as Childeren 
     //this.AddChild(txtService); 

     this.Services = text; 
     this.Logo = Logo; 
    } 

    public string Services 
    { 
     get{ return txtService.Text.ToString() } 
     set 
     { 
      txtService.Text = value; 
     } 
    } 

    public string Logo 
    { 
     get{ return imgLogo.Source.ToString(); } 
     set 
     { 
      var uriSource = new Uri(value); 
      imgLogo.Source = new BitmapImage(uriSource); 
     } 
    } 

Мои cvMenuItem.xaml.cs

<UserControl x:Class="WpfApplication1.cvMenuItem" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" Height="50" Width="186"> 
    <Grid Width="186" VerticalAlignment="Top"> 
     <Image Name="imgLogo" Height="50" Width="50" HorizontalAlignment="Left" VerticalAlignment="Top" OpacityMask="{DynamicResource {x:Static SystemColors.ActiveCaptionTextBrushKey}}" /> 
     <TextBlock Name="txtService" HorizontalAlignment="Left" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Bottom" Height="18" Width="121" Margin="70,0,0,18" RenderTransformOrigin="0.499,1.932"/> 
    </Grid> 
</UserControl> 
+0

Может кто-нибудь мне помочь? – user3160134

+0

Я все еще ищу решение, но это частично сработало ... Добавление imgLogo в качестве дочернего элемента в конструкторе, похоже, помогает. Но я НЕ МОГУ добавить txtService в качестве второго ребенка, CODE ... this.AddChild (imgLogo); – user3160134

ответ

1

Прежде всего, вам нужно позвонить InitializeComponent в вас добавили пользовательский конструктор, так как это необходимо для правильной обработки XAML. В противном случае все элементы управления, которые вы добавляете в XAML, будут пустыми при запуске приложения.

Кроме того, нет смысла создавать TextBlock и Image снова в кодировке. Вам просто нужно использовать те, которые созданы в XAML.

Так, чтобы это заработало, измените код в конструкторе на следующее:

public cvMenuItem(string text, string Logo) 
{ 
    InitializeComponent(); 

    this.Height = 50; 
    this.Width = 186; 

    this.Services = text; 
    this.Logo = Logo; 
} 
+0

Большое спасибо, это именно то, что я искал – user3160134

Смежные вопросы