2011-05-06 59 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

相關問題