In my app I have many Entry controls on multiple pages. I also have a behavior 'EntryHighlightBehavior' that simply highlights the control and the label that identifies it. This works as expected. I also have a StaticResource that gives them consistent formatting. I would like to identify the behavior inside the element of my style so that I don't have to enumerate it each time I create a new Entry. I looked at this post Style target behaviors MAUI but it creates a command which I'm not looking to do. So any Help would be appreciated. Relevant code below: EntryHighlightBehavior
public class EntryHighlightBehavior : Behavior<Entry>
{
protected override void OnAttachedTo(Entry entry)
{
entry.Focused += OnEntryFocusChanged;
entry.Unfocused += OnEntryFocusChanged;
base.OnAttachedTo(entry);
}
protected override void OnDetachingFrom(Entry entry)
{
entry.Focused -= OnEntryFocusChanged;
entry.Unfocused -= OnEntryFocusChanged;
base.OnDetachingFrom(entry);
}
void OnEntryFocusChanged(object sender, FocusEventArgs e)
{
var myentry = sender as Entry;
var myGrid = myentry.Parent as Grid;
if (e.IsFocused)
myGrid.BackgroundColor = App.HighlightColor;
else
myGrid.BackgroundColor = Colors.White;
}
}
Xaml:
<Grid x:Name="grdCustomOptions" ColumnDefinitions="235,*" RowDefinitions="40,40" Grid.Row="2" Grid.ColumnSpan="2" IsVisible="false">
<Label x:Name="lblCustomoption" Text="Custom Option" Style="{StaticResource LabelEntry}" Grid.ColumnSpan="2" />
<Entry x:Name="entCustomoption" Placeholder="Custom Option" Style="{StaticResource EntryPlain}"
ReturnType="Next" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" WidthRequest="400" >
<Entry.Behaviors>
<behave:EntryHighlightBehavior/>
</Entry.Behaviors>
</Entry>
</Grid>
StaticResource (Style.xaml):
<Style x:Key="EntryPlain" TargetType="Entry">
<Setter Property="HeightRequest" Value="40"/>
<Setter Property="Keyboard" Value="Plain"/>
<Setter Property="ReturnType" Value="Done"/>
<Setter Property="HorizontalOptions" Value="Start"/>
<Setter Property="VerticalOptions" Value="Center"/>
<Setter Property="BackgroundColor" Value="Transparent"/>
<Setter Property="WidthRequest" Value="200"/>
<Setter Property="Grid.Column" Value="1"/>
<Setter Property="Grid.Row" Value="0"/>
<Setter Property="local:KeyboardStyle.KeyboardFlags"
Value="Suggestions,CapitalizeCharacter"/>
<Setter Property="behave:EntryHighlightBehavior"> <<===== How do I do this?????
</Setter>
</Style>
You may refer to this Consume a .NET MAUI behavior with a style, which points out the right way to put a Behavior property into a Style.
For your case, you may take up the following steps,
1.Adding an attached property in your EntryHighlightBehavior. Creating a static getter and setter for it and implementing logic in the propertyChanged delegate.
2.Consuming the Behavior it in Style,
Then you don't have to enumerate the Behavior property each time you create a new Entry.
If you still have any questions, feel to ask me.
Hope it helps!