У меня есть приложение WPF, которое использует дерево просмотра списка для навигации. В этом дереве, у меня есть список типов объектов, так что-то похожее на это:Проблема добавления изображения в Framework Element Factory WPF
+Domain
-Process
-Procedure
-Task
-Object Name - Types
Рядом с каждым именем объекта на правой стороне находится значок редактирования. Я хотел бы добавить значок слева от имени объекта на основе типа объекта. Типы объектов могут быть переключателем, комбинированным полем и т. Д. У меня есть тип объекта, поступающий из базы данных, так что это нормально. Моя проблема заключается в том, что это дерево создается динамически. Поэтому я использовал FrameworkElementFactory, чтобы добавить панель стека рядом с каждым именем объекта, а затем добавить кнопку редактирования рядом с каждым именем объекта. Надеюсь, это имеет смысл.
То, что я пытался до сих пор является для части изображения:
DataTemplate dataTemp = new DataTemplate();
//create stack panel and text block
FrameworkElementFactory stkPanel = new FrameworkElementFactory(typeof(StackPanel));
FrameworkElementFactory txtBlock = new FrameworkElementFactory(typeof(TextBlock));
FrameworkElementFactory img = new FrameworkElementFactory(typeof(Image));
Image imgIcon = new Image();
BitmapImage bi = new BitmapImage();
//set value of text block to the object name of the tree
txtBlock.SetValue(TextBlock.TextProperty, taskObjectRow["ObjectName"].ToString());
string objectType;
objectType = taskObjectRow["Type"].ToString();
if (objectType.ToString() == "RadioGroup")
{
bi.UriSource = new Uri("Radiobutton.ico");
imgIcon.Source = bi;
img.SetValue(Image.SourceProperty,imgIcon);
}
////set the orientation of text in the stake panel to horizontal
stkPanel.SetValue(StackPanel.OrientationProperty, Orientation.Horizontal);
FrameworkElementFactory editTreeBtn =new
FrameworkElementFactory(typeof(editTreeButton));
editTreeBtn.SetValue(editTreeButton.ObjectIDProperty,taskObjectRow["ObjectID"]);
//append txt block and user control to the stack panel
stkPanel.AppendChild(txtBlock);
stkPanel.AppendChild(img);
stkPanel.AppendChild(editTreeBtn);
//add stkPanel to data template
dataTemp.VisualTree = stkPanel;
Когда я пытаюсь с помощью растрового подхода, я получаю сообщение об ошибке, что я не могу создать экземпляр window1, который мой Приложение WPF. Все, что я пытаюсь сделать, это определить тип объекта, а затем установить изображение значка на основе динамического. Я просто из идей, есть ли другой способ достичь этого, используя этот подход?
Просто обновление, я, наконец, получил мимо Падает, что обновленный код заключается в следующем:
var img = new FrameworkElementFactory(typeof(Image));
BitmapImage bi = new BitmapImage();
//set value of text block to the object name of the tree
txtBlock.SetValue(TextBlock.TextProperty,
taskObjectRow["ObjectName"].ToString());
var objectType = taskObjectRow["Type"].ToString();
if (objectType.ToString() == "Combobox")
{
bi.BeginInit();
bi.UriSource = new Uri(@"Combobox.ico", UriKind.Relative);
bi.EndInit();
//Uri uri = new Uri("Combobox.ico", UriKind.Relative);
//Image imgTest = new Image();
//ImageSource imgSource = new BitmapImage(uri);
//imgTest.Source = imgSource;
img.SetValue(Image.SourceProperty, bi);
img.SetValue(Image.VisibilityProperty, Visibility.Visible);
}
Однако, значок не отображается в настоящее время. Кто-нибудь знает, почему?
Объединять ваши счета в ваш зарегистрированный один (спасибо за регистрацию, кстати !). Пожалуйста, прочитайте [faq] (http://stackoverflow.com/faq), мы хотели бы держать вопросы в вопросах и ответах в ответах. – Will
Кроме того, если у вас есть новые вопросы, не бойтесь задавать новый вопрос. Я не уверен, связаны ли ваши оригиналы и добавление, которые вы сделали. Но я могу сказать вам, что вы должны настроить свои [настройки трассировки WPF] (http://i.imgur.com/mdi74.png). Кроме того, немного проталкивать здесь .... 'if (objectType == typeof (Combobox))' и WPF не является окнами. Брут-форсинг ваш путь через код НЕ лучший способ. Отнюдь не. Весь этот код можно заменить простым связыванием. – Will