我正在尝试通过子控件上的触发器修改父控件的属性。具体来说,我试图通过Border的子TextBox的OnKeyboardFocus触发器修改Border的DropShaddowEffect的不透明度。
但是,setter的TargetName会出现无法识别名称的错误。
这是XAML:
<Border x:Name="HeaderTextBoxBorder">
<Border.Effect>
<DropShadowEffect Opacity="20"/>
</Border.Effect>
<TextBox x:Name="HeaderTextBox">
<TextBox.Style>
<Style
TargetType="{x:Type TextBox}">
<!-- Attmpting to change opacity on focus -->
<Style.Triggers>
<Trigger
Property="IsKeyboardFocused"
Value="True">
<Setter
<!-- The error occurs here -->
TargetName="HeaderTextBoxBorder"
Property="Effect">
<Setter.Value>
<DropShadowEffect Opacity="100"/>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</Border>
看看XAML,有什么东西弹出不正确吗?
感谢您的时间。
答案 0 :(得分:3)
Style是一个单独的名称范围,因此您无法通过它的名称访问您的边框。
您需要将Border.Effect属性绑定到TextBox.IsKeyboardFocused元素并以这种方式切换不透明度,如:
<Border.Effect>
<DropShadowEffect Opacity="{Binding ElementName=HeaderTextBox, Path=IsKeyboardFocused, Converter={StaticResource local:CustomConverter}" />
</Border.Effect>
其中CusotmConverter实现IValueConverter并返回20或100,具体取决于布尔值。
答案 1 :(得分:0)
我很晚:) IsKeyboardFocusWithin可以用来解决这个问题。当该元素的任何子元素具有键盘焦点时,该属性将设置为true。
<Window.Resources>
<Style x:Key="HoneydewFocus" TargetType="Border">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="true">
<Setter Property="Background" Value="Honeydew"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel>
<Border Margin="10"
Style="{StaticResource HoneydewFocus}">
<TextBox Width="200" Height="25" Margin="10"/>
</Border >
</StackPanel>