2013-07-08 52 views
1

对某些故事板使用事件触发器。
还需要将不透明度分配给没有故事板的TextBlock。
如何直接分配基于触发器的值?EventTrigger赋值属性(无故事板)

<Expander.Triggers> 
    <EventTrigger RoutedEvent="Expander.Expanded"> 

试图在扩展事件这样做,但没有奏效。

+0

[使用EventTrigger设置属性]的可能的重复(http://stackoverflow.com/questions/942548/setting-a-property-with-an-eventtrigger) –

+0

该答案表示使用附加行为。我不明白如何用AttachedBehavior来做到这一点。我没有Expression Blend。 – Paparazzi

+0

附加行为不需要混合。他们是混合sdk的一部分(并且因为混合与VS 2012一起发货,所以它也随之发货)。而且,混合行为是通过依赖属性对附加行为的形式化。这里是一个很好的差异的基础:http://briannoyes.net/2012/12/20/AttachedBehaviorsVsAttachedPropertiesVsBlendBehaviors.aspx –

回答

1

这是一个DataTemplate的小例子。有一个Grid其中有Expander与两个TextBlocks。一个在扩展器InnerTextBlock内,另一个不在 - OuterTextBlock。当属性IsExpanded == True我们用DataTriggers做具体操作。

XAML

<Window.Resources> 
    <DataTemplate DataType="{x:Type local:MyExpanderData}"> 
     <Grid x:Name="MainGrid"> 
      <Expander Name="MyExpander" Header="{Binding HeaderName}" IsExpanded="{Binding isExpanded}"> 
       <TextBlock Name="InnerTextBlock" Text="InnerTextBlock" Width="150" Height="30" VerticalAlignment="Top" FontSize="16" /> 
      </Expander> 

      <TextBlock Name="OuterTextBlock" Text="OuterTextBlock" Width="150" Height="30" Margin="0,30,0,0" FontSize="16" /> 
     </Grid> 

     <!-- Our DataTriggers --> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding="{Binding ElementName=MyExpander, Path=IsExpanded}" Value="True"> 
       <Setter TargetName="OuterTextBlock" Property="Opacity" Value="0.5" />      
      </DataTrigger> 

      <DataTrigger Binding="{Binding ElementName=MyExpander, Path=IsExpanded}" Value="True"> 
       <Setter TargetName="InnerTextBlock" Property="Foreground" Value="Red" /> 
      </DataTrigger> 

      <DataTrigger Binding="{Binding ElementName=MyExpander, Path=IsExpanded}" Value="True"> 
       <Setter TargetName="MyExpander" Property="Header" Value="Expander open" /> 
      </DataTrigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 

    <!-- Resource data for the Expander --> 
    <local:MyExpanderData x:Key="MyExpanderData" HeaderName="Test Expander" isExpanded="True" /> 
</Window.Resources> 

<Grid> 
    <!-- Our DataTemplate in ContentControl --> 
    <ContentControl Name="MyContentControl" Content="{StaticResource MyExpanderData}" />  
</Grid> 

Code behind

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 
} 

public class MyExpanderData 
{ 
    private bool expanded = false; 
    private string headerName = ""; 

    public bool isExpanded 
    { 
     get 
     { 
      return expanded; 
     } 

     set 
     { 
      expanded = value; 
     } 
    } 

    public string HeaderName 
    { 
     get 
     { 
      return headerName; 
     } 

     set 
     { 
      headerName = value; 
     } 
    } 
} 

在类MyExpanderData存储的数据,然后将它们在我们DataTemplateBinding。所有属性都存储在DataTemplate中,我们可以通过这个类来设置。

+0

不是很漂亮,但我所做的是在Collapsed中使用故事板来设置值。 – Paparazzi