2017-09-14 18 views
9

एंड्रॉइड पर Xamarin.Forms रद्द करें। पिकर पर क्लिक करने से संवाद खुलता है और नकारात्मक बटन में "रद्द करें" का डिफ़ॉल्ट पाठ होता है। मैं इसे बदलने में किस तरह सक्षम हूं?Xamarin फॉर्म एंड्रॉइड परिवर्तन पर पिकर टेक्स्ट

मैं Xamarin का ओपन सोर्स प्रोजेक्ट में देखा और वे इस

builder.SetNegativeButton(global::Android.Resource.String.Cancel, (s, a) => ... 

की तरह सकारात्मक बटन पाठ सेट इस विधि निजी है तो मैं नहीं कर सकते वर्ग विधि ओवरराइड।

न तो मैं इस वर्ग के पेस्ट कार्यान्वयन कॉपी कर सकते हैं क्योंकि इसके सदस्यों Xamarn को dll-निजी रहे हैं ...

Xamarin.Forms पर कि पिकर कार्यान्वयन के लिए लिंक Andoid:

https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Platform.Android/Renderers/PickerRenderer.cs

+1

एक पुल अनुरोध – Jason

+0

सबमिट करें और कोड को प्रतिस्थापित करें? और xamarin nuget पैकेज की बजाय इसे मेरे प्रोजेक्ट में शामिल करें? –

+0

क्या आप बस अपने स्वयं के प्रस्तुतकर्ता का उपयोग कर सकते हैं? बस Xamarin से कार्यान्वयन को लगभग कॉपी करें और टेक्स्ट को बदलने का एक तरीका रखने के लिए इसका विस्तार करें। – tjugg

उत्तर

3

Xamarin रूपों एंड्रॉयड परिवर्तन पर पिकर रद्द पाठ

एक विकल्प के विकल्प के रूप में , तो आप अपने PickerRenderer में पूरे संवाद को फिर से लिखने सकता है:

public class MyPickerRenderer : Xamarin.Forms.Platform.Android.PickerRenderer 
{ 
    private IElementController ElementController => Element as IElementController; 
    private AlertDialog _dialog; 

    protected override void OnElementChanged(ElementChangedEventArgs<Picker> e) 
    { 
     base.OnElementChanged(e); 

     if (e.NewElement == null || e.OldElement != null) 
      return; 

     Control.Click += Control_Click; 
    } 

    protected override void Dispose(bool disposing) 
    { 
     Control.Click -= Control_Click; 
     base.Dispose(disposing); 
    } 

    private void Control_Click(object sender, EventArgs e) 
    { 
     Picker model = Element; 

     var picker = new NumberPicker(Context); 
     if (model.Items != null && model.Items.Any()) 
     { 
      picker.MaxValue = model.Items.Count - 1; 
      picker.MinValue = 0; 
      picker.SetDisplayedValues(model.Items.ToArray()); 
      picker.WrapSelectorWheel = false; 
      picker.DescendantFocusability = DescendantFocusability.BlockDescendants; 
      picker.Value = model.SelectedIndex; 
     } 

     var layout = new LinearLayout(Context) { Orientation = Orientation.Vertical }; 
     layout.AddView(picker); 

     ElementController.SetValueFromRenderer(VisualElement.IsFocusedProperty, true); 

     var builder = new AlertDialog.Builder(Context); 
     builder.SetView(layout); 
     builder.SetTitle(model.Title ?? ""); 
     builder.SetNegativeButton("Cancel =-= ", (s, a) => 
     { 
      ElementController.SetValueFromRenderer(VisualElement.IsFocusedProperty, false); 
      // It is possible for the Content of the Page to be changed when Focus is changed. 
      // In this case, we'll lose our Control. 
      Control?.ClearFocus(); 
      _dialog = null; 
     }); 
     builder.SetPositiveButton("Ok 0.0", (s, a) => 
     { 
      ElementController.SetValueFromRenderer(Picker.SelectedIndexProperty, picker.Value); 
      // It is possible for the Content of the Page to be changed on SelectedIndexChanged. 
      // In this case, the Element & Control will no longer exist. 
      if (Element != null) 
      { 
       if (model.Items.Count > 0 && Element.SelectedIndex >= 0) 
        Control.Text = model.Items[Element.SelectedIndex]; 
       ElementController.SetValueFromRenderer(VisualElement.IsFocusedProperty, false); 
       // It is also possible for the Content of the Page to be changed when Focus is changed. 
       // In this case, we'll lose our Control. 
       Control?.ClearFocus(); 
      } 
      _dialog = null; 
     }); 

     _dialog = builder.Create(); 
     _dialog.DismissEvent += (ssender, args) => 
     { 
      ElementController?.SetValueFromRenderer(VisualElement.IsFocusedProperty, false); 
     }; 
     _dialog.Show(); 
    } 
} 

Effect

संबंधित मुद्दे