在触发器上设置控件中的样式控件
本文关键字:控件 样式 设置 触发器 | 更新日期: 2023-09-27 18:06:18
我在我的WPF应用程序中有一个LabeledTextBox
,它非常简单:
<Grid x:Name="root">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0"
Text="{Binding Label}"
FontWeight="Bold"
VerticalAlignment="Bottom"
Margin="5,2,5,0"/>
<TextBox Grid.Row="1"
Text="{Binding Text}"
VerticalAlignment="Top"
Margin="5,0,5,2"/>
</Grid>
我把所有的模型都绑定到那个家伙上。我已经成功地实现了IDataErrorInfo
,并且可以将LabeledTextBox
设置为如下样式:
<Style TargetType="controls:LabeledTextBox">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="BorderBrush" Value="Red"/>
<Setter Property="BorderThickness" Value="5"/>
</Trigger>
</Style.Triggers>
</Style>
这一切都工作了,整个控件的边框是红色的(很明显)。我想要的是在LabeledTextBox
中操纵TextBox
,我的最终目标是将背景更改为柔和的红色。
当触发器设置在整个LabeledTextbox
上时,我如何从触发器内访问TextBox
?
我认为这是一个看似简单的任务,我只是不能得到正确的语法。我在。net 4.0环境下工作,如果这是相关的。
谢谢!
嗨,我不认为我们可以通过样式访问元素,但是我们可以通过ControlTemplate引用。触发并指定Setter中的TargetName属性。
<Style TargetType="{x:Type wpfApplication4:LabelledTextBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type wpfApplication4:LabelledTextBox}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock
Grid.Row="0"
Margin="5,2,5,0"
VerticalAlignment="Bottom"
FontWeight="Bold"
Text="ergergergegr" />
<TextBox
x:Name="MyTextBox"
Grid.Row="1"
Margin="5,0,5,2"
VerticalAlignment="Top"
Text="gtwererggerg" />
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="MyTextBox" Property="BorderBrush" Value="Red"/>
<Setter TargetName="MyTextBox" Property="BorderThickness" Value="5"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
- 添加一个依赖属性到你的用户控件。
- 将
TextBlock
Background
属性绑定到该依赖项属性。 - 修改触发器的属性。