DataTemplate中控件可见性的DataTrigger不起作用

11

我有一个ListBox,它绑定到一个列表,并为其项设置了DataTemplate。在DataTemplate中,除了第二个TextBlock的可见性外,其他都运作良好!我不明白自己做错了什么,也不想使用转换器,我已经检查过以下链接:

将布尔值绑定到ListBox中TextBlock的可见性

将按钮的可见性与ViewModel中的布尔值绑定

<ListBox Name="lsb_Jobs" Grid.Column="3" Grid.Row="2" Grid.RowSpan="6" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                     BorderThickness="0,1,0,0" Padding="0,5" Margin="0,10,5,5">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Grid Height="45">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="25"/>
                                <ColumnDefinition Width="250"/>
                                <ColumnDefinition Width="100"/>
                                <ColumnDefinition/>
                            </Grid.ColumnDefinitions>
                            <Grid.Style>
                                <Style TargetType="Grid">
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding Importance}" Value="0">
                                            <Setter Property="Background" Value="LimeGreen"/>
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding Importance}" Value=".25">
                                            <Setter Property="Background" Value="NavajoWhite"/>
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding Importance}" Value=".5">
                                            <Setter Property="Background" Value="Gold"/>
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding Importance}" Value=".75">
                                            <Setter Property="Background" Value="Orange"/>
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding Importance}" Value="1">
                                            <Setter Property="Background" Value="OrangeRed"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Grid.Style>
                            <CheckBox Name="chb_IsDone" IsChecked="{Binding Done}" FlowDirection="LeftToRight" Checked="job_Done_Checked" Unchecked="job_Done_Checked"/>
                            <TextBlock Text="{Binding Subject}" Grid.Column="1" Foreground="Black" VerticalAlignment="Center" FontSize="14"/>
                            <TextBlock Text="Done" Grid.Column="3" HorizontalAlignment="Right" VerticalAlignment="Center" Visibility="Hidden" Margin="0,0,170,0">
                                <TextBlock.Style>
                                    <Style TargetType="TextBlock">
                                        <Style.Triggers>
                                            <DataTrigger Binding="{Binding Done}" Value="True">
                                                <Setter Property="Visibility" Value="Visible"/>
                                            </DataTrigger>  
                                        </Style.Triggers>
                                    </Style>
                                </TextBlock.Style>
                            </TextBlock>
                        </Grid>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

你能告诉我为什么它不起作用吗?!我做了和其他控件一样的事情!它们都能工作,但是 TextBlock 控件没有出现!TextBlock 的 Visibility 属性有问题吗?!我已经尝试使用 FrameworkElement.Visibility 了,但那也没用。

1个回答

14
您在TextBlock上显式设置的`Visibility =“ Hidden”`属性正在覆盖样式所做的任何操作。 样式先应用,最后应用标记属性中的显式赋值。 这很有道理:如果您有全局TextBlock样式,并且在单个TextBlock上设置属性,则希望这些属性的全局值被覆盖。

1
是的!那就是我要说的 :) - Med.Amine.Touil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接