在特定条件下删除 GridViewColumn 成员
Strikethrough GridViewColumn Member Under Certain Condition
我有一个列出文件路径的 GridViewColumn
。我有一个文件观察器,如果文件被移出监视目录,我想删除我 GridViewColumn
.
中的文件路径
这是我的 XAML GridViewColumn
:
<GridViewColumn x:Name="FileNameHeader" Header="File Name" DisplayMemberBinding="{Binding filename}" />
我可以将 属性 添加到包含 filename
的结构中,例如 FileExists()
如果文件丢失,它将 return false
。然后,我只需要一种方法来设置删除线文本。我可以使用某种样式吗?
您可以添加类型为 bool
的 属性,例如Exists
到您的文件结构以指示文件是否存在。别忘了implement INotifyPropertyChanged
so that changes to the property are reflected in the user interface. In the following, I assume that your file structure is a class called FileData
. Make sure to change it to the real name in your project. I changed the property name filename
to Filename
. It is a good practice to adhere to common naming guidelines, see Capitalization Conventions参考。
为了对文本应用删除线,您需要创建自定义 CellTemplate
,因为没有直接的方法来设置列的样式。在 DataTemplate
you create a TextBlock
to display the Filename
. Add a style to the TextBlock
with a DataTrigger
that sets the Strikethrough
文本修饰取决于 Exists
属性 你的文件结构。
<GridViewColumn x:Name="FileNameHeader" Header="File Name">
<GridViewColumn.CellTemplate>
<DataTemplate DataType="{x:Type local:FileData}">
<TextBlock Text="{Binding Filename}">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding Exists}" Value="False">
<Setter Property="TextDecorations" Value="Strikethrough"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
您不一定需要设置 DataType
,但它有助于在编辑器中自动完成。
我有一个列出文件路径的 GridViewColumn
。我有一个文件观察器,如果文件被移出监视目录,我想删除我 GridViewColumn
.
这是我的 XAML GridViewColumn
:
<GridViewColumn x:Name="FileNameHeader" Header="File Name" DisplayMemberBinding="{Binding filename}" />
我可以将 属性 添加到包含 filename
的结构中,例如 FileExists()
如果文件丢失,它将 return false
。然后,我只需要一种方法来设置删除线文本。我可以使用某种样式吗?
您可以添加类型为 bool
的 属性,例如Exists
到您的文件结构以指示文件是否存在。别忘了implement INotifyPropertyChanged
so that changes to the property are reflected in the user interface. In the following, I assume that your file structure is a class called FileData
. Make sure to change it to the real name in your project. I changed the property name filename
to Filename
. It is a good practice to adhere to common naming guidelines, see Capitalization Conventions参考。
为了对文本应用删除线,您需要创建自定义 CellTemplate
,因为没有直接的方法来设置列的样式。在 DataTemplate
you create a TextBlock
to display the Filename
. Add a style to the TextBlock
with a DataTrigger
that sets the Strikethrough
文本修饰取决于 Exists
属性 你的文件结构。
<GridViewColumn x:Name="FileNameHeader" Header="File Name">
<GridViewColumn.CellTemplate>
<DataTemplate DataType="{x:Type local:FileData}">
<TextBlock Text="{Binding Filename}">
<TextBlock.Style>
<Style TargetType="{x:Type TextBlock}">
<Style.Triggers>
<DataTrigger Binding="{Binding Exists}" Value="False">
<Setter Property="TextDecorations" Value="Strikethrough"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
您不一定需要设置 DataType
,但它有助于在编辑器中自动完成。