Question

Est-il possible de mettre à jour un BorderBrush de AutoCompleteBox basé sur un modèle lors de l'exécution? Je ne peux pas sembler régler le BorderBrush ou l'arrière-plan.

Même des déclarations de base comme TxtFoodSearch.BorderBrush = new SolidColorBrush (Colors.Red) ne semblent pas faire une différence après la page chargée.

Mon Xaml est ci-dessous.

                <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>
Était-ce utile?

La solution

Une façon que j'ai réussi à trouver la façon d'aborder le style par le code est le suivant.

Promenade de l'arbre visuel et obtenir le AutoCompleteBox, jeter cela dans une zone de texte, puis ajustez les couleurs (frontière, fond, etc)

//Cast into textbox
TextBox Temp = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(MyAutoCompleteControl, 0), 0) as TextBox;

Temp.BorderBrush = new SolidColorBrush(Colors.Red);//Change border color

Je suis sûr qu'il ya une meilleure façon, mais cela semble fonctionner.

Autres conseils

Si vous utilisez Silverlight 3 (où les styles peuvent être réglés plusieurs fois), alors il est plus facile: vous pouvez réellement régler le TextBoxStyle ( sur MSDN ).

Vous pouvez ensuite créer un nouveau style dans le code-behind (douleur), ou modifier / apply peut-être une autre de vos styles prédéfinis dans le code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top