我有一个简单的用户控件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仅适用于DataTemplate或ControlTemplate.(WPF博士在此论坛帖子中的信息)
| 归档时间: |
|
| 查看次数: |
34098 次 |
| 最近记录: |