我在页面中有自定义用户控件。在此自定义用户控件中,有标签,DELETE ITEM按钮和数量文本框。 在我的页面中有一个ListBox,它从列表中获取项目,列表是从本地存储生成的。
现在当我点击DELETE ITEM按钮时,它转到ListBox_SelectionChanged并获取Selectedindex并进一步转到DeleteButton_Tap并向其提供Selectedindex并删除该项目。
现在的问题是,如果我在数量文本框内单击,它不会首先转到ListBox_SelectionChanged以获取要更新数量的项目的SelectedIndex。但它直接转到Custom User Control Control中的QuantityBox_TextChanged。
如何发送我想要更改数量的项目的SelectedIndex?
EDIT -----------------------------自定义控件代码//
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
namespace XMLParsing
{
public partial class CustomCartFavControl : UserControl
{
public CustomCartFavControl()
{
InitializeComponent();
}
Singleton singletonInstance = Singleton.mft;
private const string strConnectionString = @"isostore:/MFTDB9.sdf";
private void deleteItem_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
//Confirm:
MessageBoxResult resultDelete = MessageBox.Show("Delete This Item From Cart?", "Cart:", MessageBoxButton.OKCancel);
if (resultDelete == MessageBoxResult.OK)
{
using (MFTDataContext MFTdb = new MFTDataContext(strConnectionString))
{
IQueryable<Database> ListQuery = from Item in MFTdb.MFTCart where Item.ProductUniqueID == singletonInstance.CartItemIDs[singletonInstance.ItemToChange] select Item;
Database itemRemove = ListQuery.FirstOrDefault();
MFTdb.MFTCart.DeleteOnSubmit(itemRemove);
MFTdb.SubmitChanges();
}
singletonInstance.somethingDeletedFromCart = true;
}
else if (resultDelete == MessageBoxResult.Cancel)
{
singletonInstance.somethingDeletedFromCart = false;
}
//END
}
private void QuantityBoxLabel_TextChanged_1(object sender, TextChangedEventArgs e)
{
if (QuantityBoxLabel.Text != "")
{
singletonInstance.QuantityChanged = int.Parse(QuantityBoxLabel.Text);
}
}
private void QuantityBoxLabel_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
//Update Cart
if (singletonInstance.QuantityOriginal == singletonInstance.QuantityChanged)
{
//Do Nothing! Quantity Not Changed
singletonInstance.SomethingChanged = false;
}
else
{
//Work here for Quantity Update etc code:
singletonInstance.SomethingChanged = true;
//((Cart)this.Page).UpdateCartMethod();
if (singletonInstance.QuantityChanged == 0)
{
// new quantity =0
MessageBox.Show("You Didn't Enter A Valid Quantity. Quantity Changed Back To: " + singletonInstance.QuantityOriginal);
QuantityBoxLabel.Focus();
}
else
{
if (singletonInstance.UpdatedSuccessfully == false)
{
// new quantity !=0
//Test on Product ID:519
// Chnange to dynamic via SlectionIndex or anything..
//DISABLE FOR TESTING:
//using (MFTDataContext MFTdb = new MFTDataContext(strConnectionString))
//{
// var itemToChange = (from item in MFTdb.MFTCart
// where item.ProductID == singletonInstance.ItemToChange
// select item).Single();
// itemToChange.ProductQuantity = singletonInstance.QuantityChanged;
// itemToChange.ProductTotalPrice = singletonInstance.QuantityChanged * itemToChange.ProductPrice;
// MFTdb.SubmitChanges();
//}
singletonInstance.SomethingChanged = false;
singletonInstance.UpdatedSuccessfully = true;
}
else
{
}
(Application.Current.RootVisual as PhoneApplicationFrame).Navigate(new Uri("/Cart.xaml?refersh=" + DateTime.Now.ToString(), UriKind.Relative));
}
}
}
private void QuantityBoxLabel_LostFocus(object sender, RoutedEventArgs e)
{
// Do same as QuantityBoxLabel_MouseLeave
QuantityBoxLabel_MouseLeave(null, null);
}
private void QuantityBoxLabel_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
//Cant be 0 . Already Filtered in ThirdPage
if (QuantityBoxLabel.Text != "")
{
singletonInstance.QuantityOriginal = int.Parse(QuantityBoxLabel.Text);
}
}
private void QuantityBoxLabel_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
{
// TESTING;
// this.QuantityBoxLabel.IsHitTestVisible = false;
//Cant be 0 . Already Filtered in ThirdPage
singletonInstance.QuantityOriginal = int.Parse(QuantityBoxLabel.Text);
}
private void QuantityBoxLabel_LayoutUpdated(object sender, EventArgs e)
{
QuantityBoxLabel.Focus();
}
}
}
答案 0 :(得分:0)
别担心,我们会为您提供解决方案。如果引发Quantity_TextChanged方法,只需在Quantity TextBox中添加这些行。
<TextBox IsHitTestVisible="False" />
现在,您将被重定向到listbox_SelectionChanged方法。在那里,您将获得列表框的选定索引。现在使用
提升键盘QuantityTextBox.Focus();
现在再次从用户获取新值,使用列表框的选定索引将旧值替换为新值,然后再次显示该值。它的简单权利:))