C# 如何覆盖标签可见性?
我想通过其他内容隐藏标签可见性,假设我有一个包含DataGrid的GroupBox:C# 如何覆盖标签可见性?,c#,wpf,C#,Wpf,我想通过其他内容隐藏标签可见性,假设我有一个包含DataGrid的GroupBox: <GroupBox> <DataGrid x:Name="Dt"> <DataGrid.Columns> <DataGridTextColumn Header="home" /> </DataGrid.Columns> </DataGrid> </GroupBox
<GroupBox>
<DataGrid x:Name="Dt">
<DataGrid.Columns>
<DataGridTextColumn Header="home" />
</DataGrid.Columns>
</DataGrid>
</GroupBox>
因此,我尝试在代码后面设置DataGrid
的可见性,如:
Dt.Visibility = Visibility.Hidden;
这将隐藏DataGrid
,但主要问题是标签,事实上,如果Dt
可见,标签甚至是可见的
如何仅在DataGrid隐藏时显示标签?使用
Grid
面板,将标签放在DataGrid之前。它们位于同一网格单元中,这将确保标签在可见时由DataGrid覆盖
<GroupBox>
<Grid>
<Label Content="Foo" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<DataGrid x:Name="Dt">
<DataGrid.Columns>
<DataGridTextColumn Header="home" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</GroupBox>
使用
网格
面板并将标签放在DataGrid之前。它们位于同一网格单元中,这将确保标签在可见时由DataGrid覆盖
<GroupBox>
<Grid>
<Label Content="Foo" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<DataGrid x:Name="Dt">
<DataGrid.Columns>
<DataGridTextColumn Header="home" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</GroupBox>
您可以将标签的可见性默认为隐藏,并且在代码隐藏中,当DataGrid以任何方法隐藏时,您可以调整该方法,将标签的可见性设置为可见 XAML:
您可以将标签的可见性默认为“隐藏”,并且在代码隐藏中,当DataGrid以任何方法隐藏时,您可以将标签的可见性设置为“可见” XAML:
您可以使用绑定到
DataGrid
的Visibility
属性的DataTrigger
将样式
应用于标签
:
<GroupBox>
<StackPanel Orientation="Vertical">
<DataGrid x:Name="Dt" Visibility="Collapsed">
<DataGrid.Columns>
<DataGridTextColumn Header="home" />
</DataGrid.Columns>
</DataGrid>
<Label Content="Foo">
<Label.Style>
<Style TargetType="Label">
<Style.Triggers>
<DataTrigger Binding="{Binding Visibility, ElementName=Dt}" Value="Visible">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
</StackPanel>
</GroupBox>
使用这种仅限XAML的方法,您可以绑定到
DataGrid
的任何属性。例如,您可以绑定到HasItems
属性,并仅在DataGrid
为空时显示标签。不需要转换器。您可以使用绑定到数据网格的可见性属性的数据触发器将样式应用于标签:
<GroupBox>
<StackPanel Orientation="Vertical">
<DataGrid x:Name="Dt" Visibility="Collapsed">
<DataGrid.Columns>
<DataGridTextColumn Header="home" />
</DataGrid.Columns>
</DataGrid>
<Label Content="Foo">
<Label.Style>
<Style TargetType="Label">
<Style.Triggers>
<DataTrigger Binding="{Binding Visibility, ElementName=Dt}" Value="Visible">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Label.Style>
</Label>
</StackPanel>
</GroupBox>
使用这种仅限XAML的方法,您可以绑定到DataGrid
的任何属性。例如,您可以绑定到HasItems
属性,并仅在DataGrid
为空时显示标签。不需要转换器。您可以将标签的可见性绑定到datagrid可见性,并使用转换器切换值:
您可以将标签的可见性绑定到datagrid可见性,并使用转换器切换值:
您可以使用Datagrid元素的可见性属性,并在网格可见时指定给标签。标签也将可见
<Label Content="Foo" Visibility="{Binding ElementName=Dt, Path=Visibility}" />
您可以使用Datagrid元素的可见性属性,并在网格可见时将其指定给标签。标签也将可见
<Label Content="Foo" Visibility="{Binding ElementName=Dt, Path=Visibility}" />
您可以将标签的可见性绑定到datagrid可见性,并使用转换器切换值。您可以将标签的可见性绑定到datagrid可见性,并使用转换器切换值。
public class VisibilityInverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
return Visibility.Hidden;
if (value == Visibility.Visible)
return Visibility.Hidden;
return Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, ultureInfo culture)
{
throw new NotImplementedException();
}
}
<Label Content="Foo" Visibility="{Binding ElementName=Dt, Path=Visibility}" />