internal override void Apply(VisualElement container) { /// <sample> // You can provide the list of choices by code, or by comma separated values in UXML // <DropdownField .... choices="Option 1,Option 2,Option 3" .... /> var choices = new List <string> { "Option 1", "Option 2", "Option 3" }; // Get a reference to the dropdown field from UXML and assign it its value. var uxmlField = container.Q <DropdownField>("the-uxml-field"); uxmlField.choices = choices; uxmlField.value = choices[0]; // Create a new dropdown with the same choices, disable it, and give it a style class. var csharpField = new DropdownField("C# Field", choices, 0); csharpField.SetEnabled(false); csharpField.AddToClassList("some-styled-field"); container.Add(csharpField); // Mirror value of uxml field into the C# field. uxmlField.RegisterCallback <ChangeEvent <string> >((evt) => { csharpField.value = evt.newValue; }); /// </sample> }
public MinMaxGradientField(MinMaxGradientPropertyDrawer.PropertyData propertyData, string label) : base(label, null) { if (propertyData != null) { m_ColorMin = new PropertyField(propertyData.colorMin, ""); m_ColorMin.AddToClassList(colorFieldUssClass); m_ColorMax = new PropertyField(propertyData.colorMax, ""); m_ColorMax.AddToClassList(colorFieldUssClass); m_GradientMin = new PropertyField(propertyData.gradientMin, ""); m_GradientMax = new PropertyField(propertyData.gradientMax, ""); m_ModeDropdown = new DropdownField { choices = stringModes.ToList() }; m_ModeDropdown.createMenuCallback = () => { var osMenu = new GenericOSMenu(); for (int i = 0; i < stringModes.Length; i++) { var option = stringModes[i]; var isValueSelected = propertyData.mode.intValue == i; osMenu.AddItem(option, isValueSelected, () => { m_ModeDropdown.value = option; }); } return(osMenu); }; m_ModeDropdown.formatSelectedValueCallback = (value) => { // Don't show label for this dropdown return(""); }; m_ModeDropdown.index = propertyData.mode.intValue; m_ModeDropdown.AddToClassList(dropdownFieldUssClass); m_MixedValueTypeLabel = new Label("\u2014"); m_MixedValueTypeLabel.AddToClassList(multipleValuesLabelUssClass); var dropdownInput = m_ModeDropdown.Q <VisualElement>(null, "unity-popup-field__input"); dropdownInput.AddToClassList(dropdownInputUssClass); m_GradientsContainer = new VisualElement(); m_GradientsContainer.AddToClassList(gradientContainerUssClass); m_GradientsContainer.Add(m_GradientMin); m_GradientsContainer.Add(m_GradientMax); visualInput.AddToClassList(visualInputUssClass); visualInput.Add(m_ColorMin); visualInput.Add(m_ColorMax); visualInput.Add(m_GradientsContainer); visualInput.Add(m_MixedValueTypeLabel); visualInput.Add(m_ModeDropdown); m_ModeDropdown.RegisterCallback <ChangeEvent <string> >(e => { var index = Array.IndexOf(stringModes, e.newValue); var mode = (MinMaxGradientState)index; propertyData.mode.intValue = index; propertyData.mode.serializedObject.ApplyModifiedProperties(); UpdateFieldsDisplay(propertyData.mode); }); UpdateFieldsDisplay(propertyData.mode); } }