Windows Phone中的自定义用户控件

时间:2014-07-30 05:01:03

标签: c# xaml windows-phone-8 shopping-cart

我在页面中有自定义用户控件。在此自定义用户控件中,有标签,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();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

别担心,我们会为您提供解决方案。如果引发Quantity_TextChanged方法,只需在Qua​​ntity TextBox中添加这些行。

<TextBox IsHitTestVisible="False" />

现在,您将被重定向到listbox_SelectionChanged方法。在那里,您将获得列表框的选定索引。现在使用

提升键盘
QuantityTextBox.Focus();

现在再次从用户获取新值,使用列表框的选定索引将旧值替换为新值,然后再次显示该值。它的简单权利:))