2013-11-20 3 views
1

Я хочу передать содержимое переключателя между страницами. XAML Код:Пропустить содержимое переключателя между страницами

<RadioButton Name="errorCorrectionHLevelRadioButton" 
          Content="H (~30% correction)" 
          GroupName="errorCorrectionLevel" 
          IsChecked="True" BorderBrush="Black" Foreground="Black" Background="Black" 
          /> 

        <RadioButton Name="errorCorrectionLLevelRadioButton" 
          Content="Q (~25% correction)" 
          GroupName="errorCorrectionLevel" BorderBrush="Black" Foreground="Black" Background="Black" 
          /> 

        <RadioButton Name="errorCorrectionMLevelRadioButton" 
          Content="M (~15% correction)" 
          GroupName="errorCorrectionLevel" BorderBrush="Black" Foreground="Black" Background="Black" 
          /> 

        <RadioButton Name="errorCorrectionQLevelRadioButton" 
          Content="L (~7% correction)" 
          GroupName="errorCorrectionLevel" BorderBrush="Black" Foreground="Black" Background="Black" 
          /> 

Первый код страницы:

string myECL; 
      if (errorCorrectionHLevelRadioButton.IsChecked == true) 
       myECL = ErrorCorrectionLevel.H.ToString(); 
      else if (errorCorrectionQLevelRadioButton.IsChecked == true) 
       myECL = ErrorCorrectionLevel.Q.ToString(); 
      else if (errorCorrectionMLevelRadioButton.IsChecked == true) 
       myECL = ErrorCorrectionLevel.M.ToString(); 
      else 
       myECL = ErrorCorrectionLevel.L.ToString(); 

      NavigationService.Navigate(new Uri("/QRGeneratePage.xaml?text=" + textToEncodeTextBox.Text +"&errorCorrection="+myECL+"&logo="+logoQrCodeImage.Source, UriKind.Relative)); 

А на второй странице я хочу использовать дату формы радио бутон. Например: У меня есть конструктор, где:

 string errorCorrectionLevelChoose = String.Empty; 
     if (NavigationContext.QueryString.TryGetValue("errorCorrection", out errorCorrectionLevelChoose)) 
     { 
      ErrorCorrectionLevel ecl = (ZXing.QrCode.Internal.ErrorCorrectionLevel)errorCorrectionLevelChoose; 
     } 

     var writer = new BarcodeWriter 
     { 
      Format = BarcodeFormat.QR_CODE, 
      Renderer = new ZXing.Rendering.WriteableBitmapRenderer() 
      { 
      Foreground = colorQRCode 
      }, 
      Options = new ZXing.QrCode.QrCodeEncodingOptions 
      { 
       Height = 300, 
       Width = 300, 
       Margin = 1, 
       ErrorCorrection = ErrorCorrectionLevel.H 
      } 
     }; 

В этой строке ErrorCorrection = ErrorCorrectionLevel.H я хочу использовать мои данные из радио-кнопки. Так что если пользователь может выбрать

<RadioButton Name="errorCorrectionLLevelRadioButton" 
          Content="Q (~25% correction)" 
          GroupName="errorCorrectionLevel" BorderBrush="Black" Foreground="Black" Background="Black" 
          /> 

На второй странице будет:

ErrorCorrection = ErrorCorrectionLevel.Q 

Вы знаете, как я могу это сделать?

ответ

0

Если вы хотите только передать переменную, вы можете использовать NavigationService для ее передачи - например, выполните следующие действия:
На первой странице при навигации (я предполагаю, что ваша Q - это переменная, которую вы хотите передать):

string myQ = Q.ToString();  
NavigationService.Navigate(new Uri("/secondPage.xaml?Q=" + myQ, UriKind.Relative)); 

на второй странице, в OnNavigatingTo() читает, что переменный:

string myQ; 
NavigationContext.QueryString.TryGetValue("myQ", out myQ); 
// it's string so you probably need to for example Q = int.Parse(myQ); 

Если вы хотите отправить более сложные объекты, которые вы можете сделать это, как here - вы можете написать расширение:

public static class Extensions 
{ 
    private static object Data; 

    public static void Navigate(this NavigationService navigationService, 
           Uri source, object data) 
    { 
    Data = data; 
    navigationService.Navigate(source); 
    } 

    public static object GetNavigationData(this NavigationService service) 
    { 
    return Data; 
    } 
} 

Использование:

NavigationService.Navigate(new Uri("/Page2.xaml", UriKind.RelativeOrAbsolute), ErrorCorrectionLevel.H); 

Затем после Перемещение вы используете:

object myQ = NavigationService.GetNavigationData(); 
ErrorCorrection fromPreviousPage = (ZXing.QrCode.Internal.ErrorCorrectionLevel)myQ; 

Вы также можете прочитать некоторые более here.

+0

ErrorCorrectionLevel.H это класс ZXing.QrCode.Internal.ErrorCorrectionLevel, поэтому это не моя переменная. После ErrorCorrectionLevel. У меня есть выбор из четырех вариантов (Q, M, H, L). – user2962457

+0

@ user2962457 Вы можете играть со строками, которые вы переходите на следующую страницу, а затем в зависимости от какой строки вы можете выбрать CorrectionLevel. Или вы можете использовать этот ErrorCorrection как сложный объект - я отредактировал сообщение выше. Я думаю, вы должны выяснить, как это сделать. – Romasz

+0

Можете ли вы посмотреть мой первый пост? Я редактировал и имел ошибку; – user2962457

1

Так быстрый и грязный способ передачи объектов любого типа, в том числе UiElements, чтобы придерживаться их в PhoneApplicationService.Current.State словаре

Это типа Dictionary<String,Object>

Например, если вы имели RadioButton вы хотели чтобы положить туда можно

var myButton = PhoneApplicationService.Current.State.add("MyRadioButton",TheInstanceOfMyRadioButton); 

Затем, когда вы переходите к следующей странице вы тянете его обратно

PhoneApplicationService.Current.State["MyRadioButton"] 

Все, что сказал, вы бы гораздо лучше просто передавая значение кнопки радио

Например,

bool isChecked = (bool)MyRadioButton.IsChecked; 

PhoneApplicationService.Current.State.add("MyRadioButtonIsChecked",isChecked); 

Затем, чтобы получить его

bool isChecked = (bool)PhoneApplicationService.Current.State["MyRadioButtonIsChecked"] 
+0

Да, вы правы - это будет намного проще, если он сделает это таким образом и перенесет эти заявления на свою вторую страницу. – Romasz

+0

Это будет также легче, если он сохранит в State свой ErrorCorrection, а не экземпляр RadioButton's. – Romasz

Смежные вопросы