2012-03-09 54 views
0

我有以下XAML的代码:StyleTrigger二传手到其他元素

<Border x:Name="border"> 
     <Border.Style> 
      <Style TargetType="{x:Type Border}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding MessageType}" Value="Error"> 
         <Setter Property="Background" Value="Red" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </Border.Style> 
     <Rectangle> 
      <Rectangle.Style> 
       <Style TargetType="{x:Type Rectangle}"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding MessageType}" Value="Error"> 
          <Setter Property="Fill" Value="Icon.ico" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Rectangle.Style> 
     </Rectangle> 
    </Border> 

(消息类型是一个枚举)

我怎么能这两StyleTrigger合并成一个?可能吗?

回答

2

不知道你的父对象是什么,包含边框。但我假设一个DataTemplate,其他对象应该是相似的工作。

<DataTemplate> 
    <Border x:Name="border"> 
     <Rectangle x:Name="rect"/> 
    <Border> 

    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding MessageType}" Value="Error"> 
      <Setter TargetName="border" Property="Background" Value="Red" /> 
      <Setter TargetName="rect" Property="Fill" Value="Icon.ico" /> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
</DataTemplate> 

更新了评论:

<UserControl> 
    <UserControl.Resources> 
     <DataTemplate x:Key="myTemplate"> 
      <!-- above template --> 
     </DataTemplate> 
    </UserControl.Resources> 
    <Grid> 
     <ContentControl Content="{Binding}" ContentTemplate="{StaticResource myTemplate}"/> 
    </Grid> 
</UserControl> 
+0

父对象是一个网格。我如何使用DataTempate?我知道它只与列表结合,而不是单个对象。 – San 2012-03-10 09:27:20

+0

@San确定什么是网格的父对象?如果树中的一个父对象是可修改的,则可以用该特定对象的样式替换DataTemplate,并使ControlTemplate的Border和Rectangle部分。您也可以将ContentControl放置在Border的位置,并将我的DataTemplate设置为ContentTemplate。关于列表:列表中的DataTemplate用于ListItem,它也是通常通过ContentPresenter应用的单个对象。 – dowhilefor 2012-03-10 12:49:06

+0

你能举个例子吗?给定的树是:用户控制 - >网格..在这个网格我可以把一切。 – San 2012-03-12 11:50:29