2011-10-03 56 views
0

我试图在样式中使用DataTrigger设置元素的属性。仅使用XAML使用DataTrigger更改元素属性

<Image x:Name="post_image1" Height="278" HorizontalAlignment="Left" VerticalAlignment="Top" Source="{Binding LatestFeed[1].PostImageURL}" MaxWidth="410" MaxHeight="410" Margin="0,0,50,0"> 
          <Image.Style> 
           <Style> 
            <Style.Triggers> 
             <DataTrigger 
               Binding="{Binding post_image1.Source}" 
               Value="noimage"> 
              <Setter Property="Image.Visibility" Value="Collapsed" /> 
             </DataTrigger> 
            </Style.Triggers> 
           </Style> 
          </Image.Style> 
         </Image> 

我希望发生的是,如果源值设置为“信息noImage”(这我设置为我的数据对象的一部分)的图像可见性属性被设置为折叠。

我想我很近,我不确定我错过了什么。

回答

1

由于您的样式直接应用于图像,因此DataTrigger中的绑定使用当前图像的DataContext,因此您可以使用与源绑定中完全相同的方式引用该值。

<Image x:Name="post_image1" Height="278" HorizontalAlignment="Left" VerticalAlignment="Top" Source="{Binding LatestFeed[1].PostImageURL}" MaxWidth="410" MaxHeight="410" Margin="0,0,50,0"> 
    <Image.Style> 
     <Style TargetType="{x:Type Image}"> 
      <Style.Triggers> 
       <DataTrigger 
        Binding="{Binding LatestFeed[1].PostImageURL}" 
        Value="noimage"> 
         <Setter Property="Visibility" Value="Collapsed" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Image.Style> 
</Image> 
+0

啊,太棒了。那可行。作为一个方面说明,你将如何在绑定中寻找不同的元素。例如,DataTrigger会完全绑定到另一个元素? – discorax

+1

@discorax你可以通过名称引用一个元素('{Binding ElementName = post_image1,Path = Source}'),或者你可以使用一个RelativeSource绑定,它可以让你寻找一个相对于当前控件的控件('{Binding RelativeSource = {RelativeSource AncestorType = {x:Type Image}},Path = DataContext.LatestFeed [1]}'或'{Binding RelativeSource = {RelativeSource Self}}') – Rachel