Задержка объявления переменной в XAML
Я пытаюсь завершить страницу C# / XAML и у меня возникли проблемы. В основном, когда я пытаюсь скомпилировать, он жалуется, что имя переменной (Courier_List) не существует в текущем контексте. Под понятием я понимаю, почему, поскольку это еще не было объявлено нигде в коде. Однако причина, по которой я не объявил это, состоит в том, что этот упакованный.dll предназначен для работы с пакетом управления (файл XML), который содержит это определение (Courier_List), определенный как список, и содержит координаты, указывающие визуальному компилятору, где размещать список в форме.
Я предполагаю, что решение должно состоять в том, чтобы объявить переменную списка в форме... но я не уверен, как (и если она будет работать) просто объявить переменную и не использовать ее где-либо в.dll, тогда, когда все вместе он вызовет Courier_List из пакета управления и не будет перепутан между двумя переменными с одинаковыми именами.
Мое описание может сбить с толку, так как это было трудно объяснить, поэтому, если кому-то нужны разъяснения, пожалуйста, дайте мне знать. Я включил код ниже:
[assembly: CLSCompliant(true)]
namespace Flexity.RMA
{
/// <summary>
/// Interaction logic for UserControl1.xaml
/// </summary>
class RMATask : CreateWithLinkHandler
{
public RMATask()
{
try
{
// Sealed Class GUID
this.createClassGuid = new Guid("9ebd95da-1b16-b9ea-274d-6b0c16ce1bf3");
this.classToDelegate = new Dictionary<Guid, CreateLinkHelperCallback>()
{
{ ApplicationConstants.WorkItemTypeId, new CreateLinkHelperCallback (this.WorkItemCallback) }
};
}
catch (Exception exc1)
{
MessageBox.Show(exc1.Message, "Exception", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
public void WorkItemCallback(IDataItem RMAForm, IDataItem IncidentForm)
{
try
{
// Note to self: RelatedWorkItems should be in MP XML as alias under TypeProjections
if (RMAForm != null && RMAForm.HasProperty("RelatedWorkItems"))
{
// Perform Linking
RMAForm["RelatedWorkItems"] = IncidentForm;
// Copy Incident Title to RMA Title
RMAForm["Title"] = IncidentForm["Title"];
// Copy Incident Description to RMA Description
RMAForm["Description"] = IncidentForm["Description"];
// Copy Incident ID to RMA Display Name
RMAForm["DisplayName"] = "From " + IncidentForm["Id"];
}
}
catch (Exception exc2)
{
MessageBox.Show(exc2.Message, "Exception", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
}
public partial class WITemplate: UserControl
{
private readonly RelatedItemsPane _relatedItemsPane;
public WITemplate()
{
InitializeComponent();
var paneConfig = new WorkItemRelatedItemsConfiguration("RelatedWorkItems", "RelatedWorkItemSource",
"RelatedConfigItems", "RelatedKnowledgeArticles",
"FileAttachments");
_relatedItemsPane = new RelatedItemsPane(paneConfig);
tabItemRelItems.Content = _relatedItemsPane;
}
private void Tracking_Button_Click(object sender, RoutedEventArgs e)
{
switch (Courier_List.SelectedValue.ToString())
{
case "UPS":
System.Diagnostics.Process.Start("http://wwwapps.ups.com/ietracking/tracking.cgi?loc=CA_CA^&tracknum^=" + Tracking_Num.Text.ToString());
break;
case "FedEX":
System.Diagnostics.Process.Start("https://www.fedex.com/fedextrack/index.html?tracknumbers^="+Tracking_Num.Text.ToString()+"^&locale=en_CA^&cntry_code=ca_english");
break;
case "UPS SCS":
System.Diagnostics.Process.Start("https://www.upspostsaleslogistics.com/cfw/trackOrder.do?trackNumber^=" + Tracking_Num.Text.ToString());
break;
default:
break;
}
}
}
}
1 ответ
Я думаю, что вы правы насчет очевидного решения. Ваш обработчик нажатий кнопок не знает о содержимом XML пакета управления, если вы явно не подключили его.
Итак, вам нужно будет создать переменную для использования в вашем Tracking_Button_Click
обработчик для этого оператора switch. Это довольно распространенная модель; если где-то есть ресурс, который необходим в коде C#, у вас должна быть одна или две строки кода, которые ищут ресурс и присваивают его объявленной вами переменной.
Сделано правильно, вы не будете дублировать данные. Скорее система установит ссылку на существующие классы. Это, в свою очередь, позволит вам использовать пакет управления XML в коде C#.
У меня нет примеров для вашего пакета управления, но вот пара других, которые следуют шаблону. Если вы хотите попасть на ресурс XAML, вы делаете что-то вроде:
var myList = (XAMLResourceType) this.TryFindResource("myResourceKey");
Вам не нужно именно это, но вам нужно нечто очень похожее, в коде вашего обработчика. Тогда ваш switch
Заявление будет работать.