gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:58:42 25 4
gpt4 key购买 nike

我有一个带有 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>

但我得到错误“TargetName 属性不能在样式 setter 上设置”。文本框获得焦点时如何设置用户控件的背景颜色?
谢谢一堆

最佳答案

将您的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>

更新:(回答 Sheraz 的问题)

我不知道为什么 ElementName不适用于访问 UserControl 中的子项.它可能与构建可视化树的方式有关。

至于 Trigger对比 DataTrigger : Trigger用于依赖属性和 DataTrigger用于数据绑定(bind)属性(数据或其他控件)。由于您正在尝试设置 Border 的样式,放置 DataTrigger 更有意义在那里并让它观看 TextBox比拥有 TextBox改变 Border的外观.

据我了解, TargetName Setter 的属性(property)仅适用于 DataTemplateControlTemplate . ( Info from Dr. WPF in this forum post)

关于wpf - 当文本框处于焦点时更改容器的背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1441059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com