如何改变旋转StackPanel的宽度(how to change stackpanel width

2019-11-04 08:52发布

我想要显示一个StackPanel鸣叫的名单,我想可用屏幕宽度内包裹的消息(在横向和纵向)

我已经把下面的StackPanel内的列表框的ItemTemplate的DataTemplate

<StackPanel>
<Image Source="{Binding ImageSource}" Height="73" Width="73" VerticalAlignment="Top" />
<StackPanel Width="380">
<TextBlock Text="{Binding UserName}" Foreground="#FFC8AB14" FontSize="28"/>
<TextBlock Text="{Binding Message}" TextWrapping="Wrap" FontSize="20" />
<TextBlock Text="{Binding CreatedAt}" FontSize="12" Foreground="#FFC8AB14" />
</StackPanel>
</StackPanel>

当我旋转设备到景观,StackPanel中contaning的鸣叫保持在宽度= 380,如果删除宽度则该消息文本块不再包..

我需要保持对StackPanel中的宽度,当设备旋转或者是有一些方法可以让我有它适应屏幕宽度,也换到消息文本刻意改变它?

Answer 1:

尝试使用一个网格,而不是一个StackPanel,在模板的外部容器。 你可以定义一个列的方式扩大到采取所有可用空间。

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="auto" />
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Image Grid.Column="0" Source="{Binding ImageSource}" Height="73" Width="73" VerticalAlignment="Top" />
    <StackPanel Grid.Column="1">
        <TextBlock Text="{Binding UserName}" Foreground="#FFC8AB14" FontSize="28"/>
        <TextBlock Text="{Binding Message}" FontSize="20" />
        <TextBlock Text="{Binding CreatedAt}" FontSize="12" Foreground="#FFC8AB14" />
    </StackPanel>
</Grid>


Answer 2:

你必须附加到OrientationChanged事件

    public MainPage()
    {
        InitializeComponent();
        this.OrientationChanged += new EventHandler<OrientationChangedEventArgs>(MainPage_OrientationChanged);
    }

    void MainPage_OrientationChanged(object sender, OrientationChangedEventArgs e)
    {
        myStackpanel.Width = 100;
    }


文章来源: how to change stackpanel width on rotate