public IEnumerable <FrameworkElement> GetControls() { PropertyInfo[] props = GetType().GetProperties(); foreach (PropertyInfo prop in props) { if (!prop.CanWrite || !prop.CanRead) { continue; } string propName = prop.Name; Type propType = prop.PropertyType; string localizedName; string key1 = $"{Type}_{propName}"; string key2 = $"Shared_{propName}"; if (LocalizationManager.Current.Reward.ContainsKey(key1)) { localizedName = LocalizationManager.Current.Reward.Translate(key1); } else if (LocalizationManager.Current.Reward.ContainsKey(key2)) { localizedName = LocalizationManager.Current.Reward.Translate(key2); } else { localizedName = key1; } Grid borderContents = new Grid(); Label l = new Label { Content = localizedName }; TooltipAttribute rewardTooltip = prop.GetCustomAttribute <TooltipAttribute>(); if (rewardTooltip != null) { l.ToolTip = rewardTooltip.Text; } else if (LocalizationManager.Current.Reward.ContainsKey($"{key1}_Tooltip")) { l.ToolTip = LocalizationManager.Current.Reward[$"{key1}_Tooltip"]; } else if (LocalizationManager.Current.Reward.ContainsKey($"{key2}_Tooltip")) { l.ToolTip = LocalizationManager.Current.Reward[$"{key2}_Tooltip"]; } RangeAttribute rangeAttribute = prop.GetCustomAttribute <RangeAttribute>(); AssetPickerAttribute assetPickerAttribute = prop.GetCustomAttribute <AssetPickerAttribute>(); borderContents.Children.Add(l); FrameworkElement valueControl = null; if (propType == typeof(uint)) { valueControl = new MahApps.Metro.Controls.NumericUpDown() { Maximum = uint.MaxValue, Minimum = uint.MinValue, ParsingNumberStyle = System.Globalization.NumberStyles.Integer, HideUpDownButtons = true }; (valueControl as MahApps.Metro.Controls.NumericUpDown).SetBinding(MahApps.Metro.Controls.NumericUpDown.ValueProperty, propName); } else if (propType == typeof(byte?)) { byte newMax, newMin; if (rangeAttribute != null && rangeAttribute.Maximum is byte rMax && rangeAttribute.Minimum is byte rMin) { newMax = rMax; newMin = rMin; } else { newMax = byte.MaxValue; newMin = byte.MinValue; } valueControl = new Controls.OptionalByteValueControl(); (valueControl as Controls.OptionalByteValueControl).upDown.Maximum = newMax; (valueControl as Controls.OptionalByteValueControl).upDown.Minimum = newMin; (valueControl as Controls.OptionalByteValueControl).upDown.SetBinding(Xceed.Wpf.Toolkit.ByteUpDown.ValueProperty, propName); }
public IEnumerable <FrameworkElement> GetControls() { PropertyInfo[] props = GetType().GetProperties(); foreach (PropertyInfo prop in props) { if (!prop.CanWrite || !prop.CanRead) { continue; } string propName = prop.Name; Type propType = prop.PropertyType; // string localizedName = LocalizationManager.Current.Condition[$"{Type}_{propName}"]; string localizedName; string key1 = $"{Type}_{propName}"; string key2 = $"Shared_{propName}"; if (LocalizationManager.Current.Condition.ContainsKey(key1)) { localizedName = LocalizationManager.Current.Condition.Translate(key1); } else if (LocalizationManager.Current.Condition.ContainsKey(key2)) { localizedName = LocalizationManager.Current.Condition.Translate(key2); } else { localizedName = key1; } Grid borderContents = new Grid(); Label l = new Label { Content = localizedName }; TooltipAttribute conditionTooltip = prop.GetCustomAttribute <TooltipAttribute>(); if (conditionTooltip != null) { l.ToolTip = conditionTooltip.Text; } else if (LocalizationManager.Current.Condition.ContainsKey($"{key1}_Tooltip")) { l.ToolTip = LocalizationManager.Current.Condition[$"{key1}_Tooltip"]; } else if (LocalizationManager.Current.Condition.ContainsKey($"{key2}_Tooltip")) { l.ToolTip = LocalizationManager.Current.Condition[$"{key2}_Tooltip"]; } borderContents.Children.Add(l); RangeAttribute rangeAttribute = prop.GetCustomAttribute <RangeAttribute>(); AssetPickerAttribute assetPickerAttribute = prop.GetCustomAttribute <AssetPickerAttribute>(); FrameworkElement valueControl = null; if (propType == typeof(ushort)) { ushort newMax, newMin; if (rangeAttribute != null && rangeAttribute.Maximum is ushort rMax && rangeAttribute.Minimum is ushort rMin) { newMax = rMax; newMin = rMin; } else { newMax = ushort.MaxValue; newMin = ushort.MinValue; } valueControl = new MahApps.Metro.Controls.NumericUpDown() { Maximum = newMax, Minimum = newMin, ParsingNumberStyle = System.Globalization.NumberStyles.Integer, HideUpDownButtons = true }; (valueControl as MahApps.Metro.Controls.NumericUpDown).SetBinding(MahApps.Metro.Controls.NumericUpDown.ValueProperty, propName); if (assetPickerAttribute != null) { var vcMenu = new ContextMenu(); vcMenu.Items.Add(ContextHelper.CreateSelectAssetButton(assetPickerAttribute.AssetType, (asset) => { (valueControl as MahApps.Metro.Controls.NumericUpDown).Value = asset.id; }, assetPickerAttribute.Key, assetPickerAttribute.Icon)); (valueControl as MahApps.Metro.Controls.NumericUpDown).ContextMenu = vcMenu; } }