Silverlight AutoCompleteBox BorderBrush运行时颜色变化?

时间:2009-02-15 20:46:32

标签: silverlight autocomplete silverlight-toolkit

是否可以在运行时更新模板化的AutoCompleteBox的BorderBrush?我似乎无法设置BorderBrush或背景。

在页面加载后,甚至像TxtFoodSearch.BorderBrush = new SolidColorBrush(Colors.Red)这样的基本语句也没有什么区别。

我的Xaml在下面。

                <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>

2 个答案:

答案 0 :(得分:0)

我设法找到如何通过代码解决样式的一种方法如下。

走可视树并获取AutoCompleteBox,将其投射到文本框中,然后调整颜色(边框,背景等)

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

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

我确信有更好的方法,但这似乎有用。

答案 1 :(得分:0)

如果您正在使用Silverlight 3(可以多次设置样式),则更容易:您可以实际设置TextBoxStyleon MSDN here)。

然后,您可以在代码隐藏中创建一个新样式(痛苦),或者可能在代码中更改/应用另一个预定义样式。