Is it possible to update a templated AutoCompleteBox’s BorderBrush at runtime? I can’t seem to set the BorderBrush or the background.
Even base statements like TxtFoodSearch.BorderBrush = new SolidColorBrush(Colors.Red) don’t seem to made a difference after the page has loaded.
My Xaml is below.
<controls:AutoCompleteBox x:Name='MyAutoCompleteSample' Margin='17,24,58,32' FontSize='12'> <controls:AutoCompleteBox.Style> <Style TargetType='controls:AutoCompleteBox'> <Setter Property='IsTabStop' Value='False' /> <Setter Property='Template'> <Setter.Value> <ControlTemplate TargetType='controls:AutoCompleteBox'> <Grid Margin='{TemplateBinding Padding}' Background='{TemplateBinding Background}'> <TextBox IsTabStop='True' x:Name='Text' Style='{TemplateBinding TextBoxStyle}' Margin='0' KeyDown='MyAutoCompleteSample_KeyDown' /> <Popup x:Name='Popup'> <Border x:Name='PopupBorder' HorizontalAlignment='Stretch' Opacity='0.0' BorderThickness='0' CornerRadius='3'> <Border.RenderTransform> <TranslateTransform X='1' Y='1' /> </Border.RenderTransform> <Border.Background> <SolidColorBrush Color='#11000000' /> </Border.Background> <Border HorizontalAlignment='Stretch' Opacity='1.0' Padding='0' ToolTipService.ToolTip='Select or enter your food selection' BorderThickness='{TemplateBinding BorderThickness}' BorderBrush='{TemplateBinding BorderBrush}' CornerRadius='3'> <Border.RenderTransform> <TransformGroup> <TranslateTransform X='-1' Y='-1' /> </TransformGroup> </Border.RenderTransform> <Border.Background> <LinearGradientBrush EndPoint='0.5,1' StartPoint='0.5,0'> <GradientStop Color='#FFDDDDDD' Offset='0'/> <GradientStop Color='#AADDDDDD' Offset='1'/> </LinearGradientBrush> </Border.Background> <ListBox x:Name='SelectionAdapter' ScrollViewer.HorizontalScrollBarVisibility='Auto' ScrollViewer.VerticalScrollBarVisibility='Auto' ItemContainerStyle='{TemplateBinding ItemContainerStyle}' ItemTemplate='{TemplateBinding ItemTemplate}' /> </Border> </Border> </Popup> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name='PopupStates'> <VisualStateGroup.Transitions> <VisualTransition GeneratedDuration='0:0:0.1' To='PopupOpened' /> <VisualTransition GeneratedDuration='0:0:0.2' To='PopupClosed' /> </VisualStateGroup.Transitions> <VisualState x:Name='PopupOpened'> <Storyboard> <DoubleAnimation Storyboard.TargetName='PopupBorder' Storyboard.TargetProperty='Opacity' To='1.0' /> </Storyboard> </VisualState> <VisualState x:Name='PopupClosed'> <Storyboard> <DoubleAnimation Storyboard.TargetName='PopupBorder' Storyboard.TargetProperty='Opacity' To='0.0' /> </Storyboard> </VisualState> </VisualStateGroup> </VisualStateManager.VisualStateGroups> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </controls:AutoCompleteBox.Style> </controls:AutoCompleteBox>
One way I’ve managed to find how to address the styling through code is the following.
Walk the visual tree and get the AutoCompleteBox, cast that into a textbox, then adjust the colors (border, background, etc)
I’m sure there is a better way, but this seems to work.