WPF中通过子控件修改父控件属性的实现方案
解决方案
你可以通过在Grid的Style中使用DataTrigger来实现需求——因为Style内的Setter无法直接通过TargetName引用外部元素,转而通过绑定目标TextBox的IsFocused属性来触发Grid的背景色变化。以下是完整的XAML实现:
<Grid x:Name="grid"> <Grid.Style> <Style TargetType="Grid"> <!-- 默认背景色可根据需求调整 --> <Setter Property="Background" Value="Transparent"/> <Style.Triggers> <!-- 当txt1获得焦点时,Grid背景设为红色 --> <DataTrigger Binding="{Binding ElementName=txt1, Path=IsFocused}" Value="True"> <Setter Property="Background" Value="Red"/> </DataTrigger> <!-- 当txt2获得焦点时,Grid背景设为绿色 --> <DataTrigger Binding="{Binding ElementName=txt2, Path=IsFocused}" Value="True"> <Setter Property="Background" Value="Green"/> </DataTrigger> </Style.Triggers> </Style> </Grid.Style> <StackPanel> <TextBox Width="300" Height="40" x:Name="txt1"/> <TextBox Width="300" Height="40" x:Name="txt2"/> </StackPanel> </Grid>
说明
- 将触发器逻辑从TextBox的Style转移到Grid自身的Style中,避开了跨元素引用的限制。
- 通过
ElementName绑定到目标TextBox的IsFocused属性,当属性值为True时触发对应的背景色设置。 - 可根据实际需求修改默认的
Background值,比如设置为白色或其他颜色。
内容的提问来源于stack exchange,提问作者Vimal CK
相关产品推荐
相关产品推荐

