2010-02-22 67 views
0

我需要能够将setter的Value设置为附加属性,但是难以提供语法。这是我的触发样子:将Setter的值设置为附加属性

<DataTrigger Binding="{Binding Path=IsDisabled}" Value="True"> 
    <Setter TargetName="LayoutRoot" Property="Opacity" Value="0.3" /> 
    <Setter TargetName="LayoutRoot" Property="Background" Value="Interaction:Behaviors.OriginalBgBrush" /> 
</DataTrigger> 

其中互动:Behaviors.OriginalBgBrush是附加属性上LayoutRoot设置,并且LayoutRoot是一个边界。我不得不这样做,因为在此之上的标准触发器会设置背景,但我无法同时检查模板和数据触发器的值。下面是整个模板,其中MultiTrigger是设置我不想要的背景的模板。此外,背景颜色以使用此ControlTemplate作为其“模板”属性的单独样式进行定义。

<ControlTemplate x:Key="StandardRowStyle" TargetType="tk:DataGridRow"> 
    <Border x:Name="LayoutRoot" Margin="0,0,0,-1" MinHeight="23" Interaction:Behaviors.OriginalBgBrush="{TemplateBinding Background}" PreviewMouseRightButtonDown="DataGridRow_SimpleMouseDown" PreviewMouseLeftButtonDown="DataGridRow_SimpleMouseDown" Background="{TemplateBinding Background}" BorderBrush="{StaticResource ElementBorderBrush}" BorderThickness="1" CornerRadius="0" SnapsToDevicePixels="True"> 
     <toolkit:SelectiveScrollingGrid x:Name="DGR_SelectiveScrollingGrid"> 
      <toolkit:SelectiveScrollingGrid.ColumnDefinitions> 
       <ColumnDefinition Width="Auto"/> 
       <ColumnDefinition Width="*"/> 
      </toolkit:SelectiveScrollingGrid.ColumnDefinitions> 

      <toolkit:SelectiveScrollingGrid.RowDefinitions> 
       <RowDefinition Height="*" MinHeight="23"/> 
       <RowDefinition Height="Auto"/> 
      </toolkit:SelectiveScrollingGrid.RowDefinitions> 

      <toolkit:DataGridCellsPresenter Grid.Column="1" Grid.Row="0" x:Name="DGR_CellsPresenter" ItemsPanel="{TemplateBinding ItemsPanel}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
      <toolkit:DataGridDetailsPresenter Grid.Column="1" Grid.Row="1" Visibility="{TemplateBinding DetailsVisibility}" toolkit:SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding Path=AreRowDetailsFrozen, Converter={x:Static tk:DataGrid.RowDetailsScrollingConverter}, ConverterParameter={x:Static tk:SelectiveScrollingOrientation.Vertical}, RelativeSource={RelativeSource AncestorType={x:Type tk:DataGrid}}}" /> 
      <!--<toolkit:DataGridRowHeader Grid.Column="2" Grid.RowSpan="2" toolkit:SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding Path=HeadersVisibility, Converter={x:Static tk:DataGrid.HeadersVisibilityConverter}, ConverterParameter={x:Static tk:DataGridHeadersVisibility.Row}, RelativeSource={RelativeSource AncestorType={x:Type tk:DataGrid}}}"/>--> 
     </toolkit:SelectiveScrollingGrid> 
    </Border> 
    <ControlTemplate.Triggers> 
     <MultiTrigger> 
      <MultiTrigger.Conditions> 
       <Condition Property="IsMouseOver" Value="True" /> 
       <Condition Property="IsSelected" Value="False" /> 
       <Condition Property="DetailsVisibility" Value="Collapsed" />  
      </MultiTrigger.Conditions> 
      <Setter TargetName="LayoutRoot" Property="Background" Value="{StaticResource InactiveSelectedBackgroundBrush}" /> 
      <Setter TargetName="LayoutRoot" Property="BorderBrush" Value="{StaticResource InactiveOuterBorderBrush}" /> 
      <Setter TargetName="LayoutRoot" Property="CornerRadius" Value="5" /> 
     </MultiTrigger>    
     <DataTrigger Binding="{Binding Path=IsDisabled}" Value="True"> 
      <Setter TargetName="LayoutRoot" Property="Opacity" Value="0.3" /> 
      <!-- Background needs to be changed back to default here --> 
     </DataTrigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 
+0

没有DataTriggers或MultiTriggers了在Silverlight的方块,所以我会假设这是WPF。 – 2010-02-22 23:04:50

回答

1

只需使用一个的ElementName绑定:

<Setter TargetName="LayoutRoot" 
     Property="Background" 
     Value="{Binding Path=(Interaction:Behaviors.OriginalBgBrush), ElementName=LayoutRoot}" /> 
+0

工程就像一个魅力,谢谢。 – dariusriggins 2010-02-23 14:41:18