如何根据窗口宽度截断控件?

时间:2014-02-12 11:54:22

标签: wpf xaml

我想根据父窗口的大小调整控件的宽度和内容。例如:

<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.我怎么能这样做? 感谢

1 个答案:

答案 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();
    }
}