【问题标题】:Silverlight AutoCompleteBox BorderBrush runtime color change?Silverlight AutoCompleteBox BorderBrush 运行时颜色变化?
【发布时间】:2009-08-31 02:52:45
【问题描述】:

是否可以在运行时更新模板化 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>

【问题讨论】:

    标签: silverlight autocomplete silverlight-toolkit


    【解决方案1】:

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

    遍历可视化树并获取 AutoCompleteBox,将其转换为文本框,然后调整颜色(边框、背景等)

    //Cast into textbox
    TextBox Temp = VisualTreeHelper.GetChild(VisualTreeHelper.GetChild(MyAutoCompleteControl, 0), 0) as TextBox;
    
    Temp.BorderBrush = new SolidColorBrush(Colors.Red);//Change border color
    

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

    【讨论】:

      【解决方案2】:

      如果您使用的是 Silverlight 3(其中可以多次设置样式),则更容易:您实际上可以设置 TextBoxStyle (on MSDN here)。

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

      【讨论】:

        猜你喜欢
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-23
        • 1970-01-01
        • 2017-08-26
        • 2013-06-07
        相关资源
        最近更新 更多