wpf - DataTemplate 内控件可见性的 DataTrigger 不起作用

标签 wpf xaml datatrigger

我有一个绑定(bind)到列表的列表框,它有一个用于其项目的数据模板。 DataTemplate 中的所有内容都运行良好,除了第二个 TextBlock 的可见性之外!我不明白我做错了什么,我不想使用转换器,我已经检查了这些链接:

Bind Bool to Visibility of TextBlock within a ListBox

Binding a Button's visibility to a bool value in 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 但这也不起作用

最佳答案

您在 TextBlock 上显式设置的 Visibility="Hidden" 将覆盖 Style 所做的任何操作。首先应用样式,然后最后应用标签属性中的显式分配。这是有道理的:如果您有全局 TextBlock 样式并且在单个 TextBlock 上设置属性,则您希望覆盖这些属性的全局值。

关于wpf - DataTemplate 内控件可见性的 DataTrigger 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34228123/

相关文章:

wpf - VS2010 的 WPF 在 Windows7 虚拟机中呈现不佳?

c# - 如何使用 wpf 和使用 mvvm 将窗口置于最前面

c# - 在从 XAML 实例化的控件中使用 MEF

wpf - 使用 datatriggers 和 IValueConverter 更新 datagridview 行背景颜色

c# - 我们如何捕获 xamDataGrid 中的行删除通知?

wpf - 如何在 WPF 中将两个 ObservableCollections 显示为单个列表?

c# - 控制不同的DataContext

windows-phone-7 - UriKind 在 Windows Phone 页面之间导航

wpf - DataTrigger 在条件为假时设置默认值

WPF DataTrigger 与 .Net 属性