Пользовательский UserControl не отображается в списке
У меня есть проблема с отображением пользовательских UserControls
в моем ListBox
программно. Я просто не могу показаться, чтобы выяснить, что случилось. Элемент списка отображается без изображения или текста.
Мой проект состоит из:
- Главное окно.xaml
- Главное окно.код XAML.cs
- cvMenuItem.xaml
- cvMenuItem.код XAML.cs
Код главного окна.код XAML.cs
private void cvMenuItem_MouseLeftButtonUp_1(object sender, MouseButtonEventArgs e)
{
lstContacts.Items.Clear();
cvMenuItem test = new cvMenuItem("test",
Environment.GetEnvironmentVariable("USERPROFILE") + @"Downloadsimages.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>
1 ответ:
Прежде всего вам нужно вызвать
InitializeComponent
в пользовательском конструкторе, который вы добавили, так как это необходимо для правильной обработки XAML. В противном случае все элементы управления, добавляемые в XAML, будут иметь значение null при запуске приложения.Кроме того, нет смысла создавать
TextBlock
иImage
снова в коде-за. Вы просто должны использовать те, которые созданы в XAML.Итак, чтобы заставить его работать, измените код в конструкторе на следующий:
public cvMenuItem(string text, string Logo) { InitializeComponent(); this.Height = 50; this.Width = 186; this.Services = text; this.Logo = Logo; }