文本框处于焦点时更改容器的背景颜色

She*_*raz 3 wpf textbox focus

我有一个简单的用户控件TextBox.我想在TextBox获得焦点时更改用户控件的颜色.这就是我所拥有的:

<UserControl x:Class="OutLookContactList.ContactSearchControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Name="root" MinHeight="30" Loaded="UserControl_Loaded">

<UserControl.Resources>

    <Style x:Key="searchTextBoxStyle" TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="true">
                <Setter TargetName="root" Property="Background" Value="{StaticResource OnMouseOverColor}" />
            </Trigger>
        </Style.Triggers>
    </Style>
</UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)

但是我得到了errot"TargetName属性不能在样式Setter上设置".如何在文本框获得焦点时设置用户控件的背景颜色?谢谢一堆

Jos*_*ant 10

它可以将你UserControl内部的内容包装成一个Border对象吗?如果是这样,您可以简单地设置样式Border:

<UserControl x:Class="Sample2.ContactSearchControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="75" Width="300">
    <Border>
        <Border.Style>
            <Style TargetType="Border">
                <Setter Property="Background" Value="White" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsFocused, ElementName=txtSearch}" Value="true">
                        <Setter Property="Background" Value="Black" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Border.Style>
        <StackPanel>
            <TextBox x:Name="txtSearch" Text="Search" />
            <TextBox Text="Other" />
        </StackPanel>
    </Border>
</UserControl>
Run Code Online (Sandbox Code Playgroud)

更新:(回答Sheraz的问题)

我不确定为什么ElementName不能用于访问儿童UserControl.它可能与构建可视树的方式有关.

至于Triggervs DataTrigger:Trigger用于依赖属性,DataTrigger用于数据绑定属性(数据其他控件).因为你试图设计风格Border,所以把它放在DataTrigger那里更有意义并让它观察而TextBox不是TextBox改变外观Border.

据我了解,该TargetName属性Setter仅适用于DataTemplateControlTemplate.(WPF博士在此论坛帖子中的信息)