如何设置椭圆风格触发上的TabControl突出时DataGrid中有选择
问题描述:
我在每个TabControl
头,其突出蓝色的,如果有在DataGrid
它下面选择任何产品的Ellipse
,否则它应该是透明的。目前我有Trigger
反过来,所以如果DataGrid
SelectedItems.Count
是0它是透明的,如果有一些默认透明,这将是很好的。如何设置椭圆风格触发上的TabControl突出时DataGrid中有选择
注意:它将有多个选项卡和关联DataGrids
。
如何才能让Style
Trigger
在Ellipse
上正常工作?
<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>
答
不要为Ellipse
的Fill
属性设置的局部值。在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
您可以将每个'TabItem'的'Tag'属性绑定到相应的'DataGrid'和使用在你的'Trigger'的绑定属性路径中。 – dymanoid