2011-05-06 55 views
2

我试图通过子控件上的触发器修改父控件的属性。具体来说,我试图通过边框的子文本框的OnKeyboardFocus触发器来修改边框的DropShaddowEffect的不透明度。Xaml:使用子控件触发器来更改父控件属性

但是,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,有什么,弹出是不正确的?

谢谢你的时间。

回答

3

样式是一个单独的名称范围,所以您将无法通过它的名称访问您的边框。

你需要的Border.Effect属性绑定到TextBox.IsKeyboardFocused元素和开关的不透明度的方式,是这样的:

<Border.Effect> 
    <DropShadowEffect Opacity="{Binding ElementName=HeaderTextBox, Path=IsKeyboardFocused, Converter={StaticResource local:CustomConverter}" /> 
</Border.Effect> 

凡CusotmConverter实施的IValueConverter并返回20或100,这取决于在布尔值上。

+1

不行,您不能通过setter访问属性的属性。 – 2011-05-06 16:18:20

+0

@ H.B。 - 我说“也许能够”;-)你说得对,忘记了。 – CodeNaked 2011-05-06 16:27:00

+0

我没有错过,只是让你知道。 – 2011-05-06 16:30:49

相关问题