我想根据父窗口的大小调整控件的宽度和内容。例如:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<StackPanel Orientation="Horizontal">
<Border Width="100" Background="Red" />
<Border Width="100" Background="Green" />
<Border Width="100" Background="Blue" />
</StackPanel>
</Grid>
</Window>
当窗口调整为小于300像素宽时,我希望Borders具有例如30.我怎么能这样做? 感谢
答案 0 :(得分:3)
您可以在Grid
中创建列,并将MaxWidth
设置为100:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MaxWidth="100"/>
<ColumnDefinition MaxWidth="100"/>
<ColumnDefinition MaxWidth="100"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Background="Red" />
<Border Grid.Column="1" Background="Green" />
<Border Grid.Column="2" Background="Blue" />
</Grid>
或者如果您想限制整个Width
的{{1}},那么这应该有效:
Grid
在这种情况下,可用空间(最多300个)将在所有列之间平均分配。
修改强>
更复杂规则的另一种解决方案可以是自定义<Grid MaxWidth="300">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Background="Red" />
<Border Grid.Column="1" Background="Green" />
<Border Grid.Column="2" Background="Blue" />
</Grid>
:
IValueConverter
然后是XAML:
public class WidthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var width = (double)value;
if (width > 300)
return 100;
else
return 30;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}