// Generate Crossword Grid and Style private Grid GenerateCrosswordGrid(ObservableCollection <ObservableCollection <LetterCell> > board) { var crossWordGrid = new Grid() { ColumnSpacing = 1, RowSpacing = 1, Padding = 0 }; crossWordGrid.SetDynamicResource(Grid.BackgroundColorProperty, "backgroundGridColour"); for (var i = 0; i < board.Count; i++) { crossWordGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); } for (var i = 0; i < board[0].Count; i++) { crossWordGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = new GridLength(1, GridUnitType.Star) }); } for (var i = 0; i < board.Count; i++) { for (var j = 0; j < board[i].Count; j++) { var boxView = new BoxView() { CornerRadius = 2 }; boxView.BindingContext = board[i][j]; boxView.SetBinding(BoxView.BackgroundColorProperty, new Binding("BackgroundCellColour", BindingMode.OneWay)); var labelDefinitionLocation = new Label() { //Style = _resources["horizontalLabelStyle"] as Style }; labelDefinitionLocation.BindingContext = board[i][j]; labelDefinitionLocation.SetBinding(Label.TextProperty, new Binding("DefinitionLocation", BindingMode.OneWay)); labelDefinitionLocation.SetDynamicResource(Label.StyleProperty, "orientationLabelStyle"); labelDefinitionLocation.SetDynamicResource(Label.TextColorProperty, "fontColour"); var entry = new CustomEntry() { MaxLength = 1, HorizontalTextAlignment = TextAlignment.Center, }; entry.Keyboard = Keyboard.Create(KeyboardFlags.CapitalizeCharacter); //entry.Effects.Add(Effect.Resolve("FormsCommunityToolkit.Effects.EntryCapitalizeKeyboard")); entry.BindingContext = board[i][j]; entry.SetBinding(CustomEntry.IsEnabledProperty, new Binding("IsEnabled", BindingMode.OneWay)); entry.SetBinding(CustomEntry.TextProperty, new Binding("LetterIn", BindingMode.TwoWay, new StringToCharConverter())); entry.SetBinding(CustomEntry.TextColorProperty, new Binding("FontColour", BindingMode.OneWay)); entry.SetBinding(CustomEntry.FontAttributesProperty, new Binding("FontWeight", BindingMode.OneWay)); entry.SetDynamicResource(CustomEntry.StyleProperty, "orientationEntryStyle"); entry.TextChanged += (s, e) => { if (IsCharUpper(e.NewTextValue) == null) { return; } if ((bool)IsCharUpper(e.NewTextValue)) { LetterCell_TextChanged(entry, e); } else { entry.Text = e.NewTextValue.ToUpper(); } }; entry.Focused += (s, e) => { EntryFocused((LetterCell)e.VisualElement.BindingContext); }; board[i][j].CellEntry = entry; board[i][j].Pos = new Tuple <int, int>(j, i); var button = new Button() { BorderColor = Color.Transparent, BackgroundColor = Color.Transparent }; button.BindingContext = board[i][j]; button.SetBinding(Button.IsEnabledProperty, new Binding("IsEnabled", BindingMode.OneWay)); button.Pressed += (s, e) => { var letterCell = (LetterCell)button.BindingContext; if (_buttonCount < 1) { Device.StartTimer(TimeSpan.FromMilliseconds(500), () => DoubleClick(letterCell)); } _buttonCount++; }; crossWordGrid.Children.Add(boxView, j, i); crossWordGrid.Children.Add(labelDefinitionLocation, j, i); crossWordGrid.Children.Add(entry, j, i); crossWordGrid.Children.Add(button, j, i); } } return(crossWordGrid); }