2013-07-08 3 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

Приложенное поведение не требует смешивания. Они являются частью blend 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

Смежные вопросы