我有一个有两行的网格,里面有一个图像和一个标签。标签的大小是锁定的,而上面的图像随网格缩小。当图像变得如此之小以至于不可见时,请说< 30像素高,我想将其可见性设置为折叠,我认为应该使标签移动到网格的中心。
如果这是纯粹在XAML中实现的,并且某种触发器正在寻找高度,那将是很好的。 X
这可能吗?如果没有,c#中最优雅的解决方案是检查图像的高度?
答案 0 :(得分:2)
这是一种方法。首先,您需要一个转换器:
public class HeightToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var gridHeight = System.Convert.ToDouble(value);
return gridHeight < 200 ? Visibility.Collapsed : Visibility.Visible;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
这是xaml:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:WpfApplication1"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Title="MainWindow"
Width="525"
Height="350"
mc:Ignorable="d">
<Grid Name="grid">
<Grid.Resources>
<local:HeightToVisibilityConverter x:Key="HeightToVisibilityConverter" />
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Label Grid.Row="0"
Content="Some Text" />
<Image Grid.Row="1"
Source="zeros.jpg"
Visibility="{Binding ElementName=grid,
Path=ActualHeight,
Converter={StaticResource HeightToVisibilityConverter}}" />
</Grid>
</Window>
仅出于测试目的,如果网格高度小于200,我将其设置为隐藏。您可以将其更改为适合您情况的任何内容。我并不是说这是最好或唯一的解决方案,但希望它会让你开始......