2017-09-05 67 views
0

我在每个TabControl头,其突出蓝色的,如果有在DataGrid它下面选择任何产品的Ellipse,否则它应该是透明的。目前我有Trigger反过来,所以如果DataGridSelectedItems.Count是0它是透明的,如果有一些默认透明,这将是很好的。如何设置椭圆风格触发上的TabControl突出时DataGrid中有选择

注意:它将有多个选项卡和关联DataGrids

如何才能让StyleTriggerEllipse上正常工作?

enter image description here

<TabControl Name="tcGeometry" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="5" ItemsSource="{Binding GEOMETRIES}" > 
    <TabControl.ItemTemplate> 
     <DataTemplate> 
      <Grid>        
       <TextBlock Text="{Binding DISPLAY_NAME}" Margin="0,0,25,0"/> 
       <Ellipse x:Name="SelectionIndicator" 
         Width="8" Height="8" 
         Stroke="Black" 
         Fill="Blue" 
         StrokeThickness="1" 
         HorizontalAlignment="Right" 
         VerticalAlignment="Top"> 
        <Ellipse.Style> 
         <Style TargetType="{x:Type Ellipse}"> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding SelectedItems.Count, ElementName=dgAudit}" Value="0"> 
            <Setter Property="Fill" Value="Transparent" /> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </Ellipse.Style> 
       </Ellipse> 
      </Grid> 
     </DataTemplate> 
    </TabControl.ItemTemplate> 
    <TabControl.ContentTemplate> 
     <DataTemplate> 
      <Grid ShowGridLines="False"> 
       <DataGrid Name="dgAudit" 
          Grid.Row="0" 
          Grid.Column="0" 
          IsReadOnly="True" 
          ItemsSource="{Binding GEOM_ASSET_OC_LIST}" 
          HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" 
          AutoGenerateColumns="False" 
          HorizontalAlignment="Stretch" 
          VerticalAlignment="Stretch" 
          RowDetailsVisibilityMode="Collapsed" 
          RowHeaderWidth="30" /> 
      </Grid> 
     </DataTemplate> 
    </TabControl.ContentTemplate> 
</TabControl> 
+0

您可以将每个'TabItem'的'Tag'属性绑定到相应的'DataGrid'和使用在你的'Trigger'的绑定属性路径中。 – dymanoid

回答

1

不要为EllipseFill属性设置的局部值。在Style设置器中设置默认值。

<Ellipse x:Name="SelectionIndicator" 
         Width="8" Height="8" 
         Stroke="Black" 
         StrokeThickness="1" 
         HorizontalAlignment="Right" 
         VerticalAlignment="Top"> 
    <Ellipse.Style> 
     <Style TargetType="{x:Type Ellipse}"> 
      <Setter Property="Fill" Value="Blue" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding SelectedItems.Count, ElementName=dgAudit}" Value="0"> 
        <Setter Property="Fill" Value="Transparent" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Ellipse.Style> 
</Ellipse> 

本地值优先于样式设定值:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/dependency-property-value-precedence

您可能还需要绑定到一个源集合Count属性,跟踪选定的项目,而不是结合元素的DataGrid属性。这是因为TabControl默认卸载非选择标签的可视化树,当你切换标签:

How to stop Wpf Tabcontrol to unload Visual tree on Tab change

+0

不幸的是,当SelectedItems.Count = 0时,触发器仍然没有响应。椭圆的填充始终是蓝色的,关于可能发生什么的任何想法?我选择并取消选择一个项目并且没有变化。 – Hank

+0

创建SelectedItems工作的单独集合,我还发现将DataGridRow上的IsSelected绑定到行数据对象会使实际选择不再消失。 – Hank

相关问题