Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-使用渐变更改背景文本框_C#_Wpf_Xaml - Fatal编程技术网

C# WPF-使用渐变更改背景文本框

C# WPF-使用渐变更改背景文本框,c#,wpf,xaml,C#,Wpf,Xaml,当文本框具有焦点时,如何更改渐变填充文本框的背景 我正在尝试创建一个文本框用户控件的样式,当用户给它焦点时,该控件将有一个渐变背景,以下是我到目前为止所做的 <Style TargetType="{x:Type TextBox}" x:Key="TextBoxNormal" > <Setter Property="SnapsToDevicePixels" Value="True"/> <Setter Property="OverridesDefaultStyle"

当文本框具有焦点时,如何更改渐变填充文本框的背景

我正在尝试创建一个文本框用户控件的样式,当用户给它焦点时,该控件将有一个渐变背景,以下是我到目前为止所做的

<Style TargetType="{x:Type TextBox}" x:Key="TextBoxNormal" >
<Setter Property="SnapsToDevicePixels" Value="True"/>
<Setter Property="OverridesDefaultStyle" Value="True"/>
<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/>
<Setter Property="FocusVisualStyle" Value="{x:Null}"/>
<!--<Setter Property="MinWidth" Value="100"/>-->
<Setter Property="Height" Value="25"/>
<Setter Property="AllowDrop" Value="true"/>
<Setter Property="FontFamily" Value="Verdana"/>
<Setter Property="FontSize" Value="12" />
<Setter Property="Padding" Value="3"/>
<Setter Property="Validation.ErrorTemplate">
    <Setter.Value>
        <ControlTemplate>
            <DockPanel LastChildFill="true">
                <Border x:Name="errorBorder" Background="Red" DockPanel.Dock="right" Margin="5,0,0,0" Width="10" Height="10" CornerRadius="10"
                        ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
                    <TextBlock Text="!" VerticalAlignment="center" HorizontalAlignment="center" FontWeight="Bold" FontSize="8" Foreground="white" />
                </Border>
                <AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center" >
                    <Border BorderBrush="red" BorderThickness="1" />
                </AdornedElementPlaceholder>
            </DockPanel>
        </ControlTemplate>
    </Setter.Value>
</Setter>

<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type TextBoxBase}">
            <Border x:Name="Border"
                BorderThickness="1"
                CornerRadius="3"
                Padding="0">
                <Border.BorderBrush>
                    <LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
                        <GradientStop Color="#AAAAA1" Offset="0" />
                        <GradientStop Color="#AAAAA1" Offset=".2" />
                    </LinearGradientBrush>
                </Border.BorderBrush>
                <ScrollViewer x:Name="PART_ContentHost" Margin="0">
                    <ScrollViewer.Background>
                        <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                            <GradientStop Offset="0" Color="#ededed"/>
                            <GradientStop Offset=".91" Color="White"/>
                        </LinearGradientBrush>
                    </ScrollViewer.Background>
                </ScrollViewer>
            </Border>

            <ControlTemplate.Triggers>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter TargetName="Border" Property="Background" Value="#EEEEEE"/>
                    <Setter TargetName="Border" Property="BorderBrush" Value="#EEEEEE"/>
                    <Setter Property="Foreground" Value="#888888"/>
                </Trigger>
                <Trigger Property="Validation.HasError" Value="true">
                    <Setter Property="Margin" Value="0 0 15 0" />
                </Trigger>                        
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>


在Xaml中有一种非常简单的方法,当
TextBox.IsFocused
为true时,使用设置
TextBox.Background
属性

<TextBox Width="100" Height="20">
    <TextBox.Style>
        <Style TargetType="TextBox">
            <Style.Triggers>
                <Trigger Property="IsFocused" Value="True">
                    <Setter Property="Background">
                        <Setter.Value>
                            <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                                <GradientStop Color="Yellow" Offset="0.0" />
                                <GradientStop Color="Red" Offset="0.25" />
                                <GradientStop Color="Blue" Offset="0.75" />
                                <GradientStop Color="LimeGreen" Offset="1.0" />
                            </LinearGradientBrush>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>
    </TextBox.Style>
</TextBox>

编辑:在您的ControlTemplate.Triggers中。您需要添加一个设置ScrollViewer背景的触发器,请尝试将以下触发器添加到样式的ControlTemplate.Triggers中

<Trigger Property="IsFocused" Value="True">
    <Setter TargetName="PART_ContentHost" Property="Background">
        <Setter.Value>
            <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                <GradientStop Color="Yellow" Offset="0.0" />
                <GradientStop Color="Red" Offset="0.25" />
                <GradientStop Color="Blue" Offset="0.75" />
                <GradientStop Color="LimeGreen" Offset="1.0" />
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
</Trigger>


这里缺少一些东西……网站不允许我发布代码。当然可以。当然,请确保将格式设置为代码:)我正在从VisualStudio复制过去,但无法正常工作。我收到消息:“看起来你的帖子大部分是代码,请添加更多细节。”然后也许你应该添加一些细节。你的问题其实有很多,但我相信你可以想出一些办法,例如,你想改变渐变的哪一部分。试着把你的代码放到pastebin.com上,并在评论中添加一个链接。我需要当文本框聚焦时,背景改成另一种颜色,比如黄色。Slowbrochacho,在组合框中,它是如何工作的?当接收到焦点时,其外观与此类似:但组合框不可编辑。以下是我的XAML代码: