0

ListBox UserControl があり、DataTemplate にグリッド コントロールがあります。MVVM を使用してデータをバインドしました。Orientation の変更については、ListBox の幅を変更できますが、リストボックス内のグリッド列の幅を変更する解決策が見つかりません。それを行う方法を教えてください。または、例やリンクを提供してください。前もって感謝します。

私の UserControl.xaml があります

<UserControl x:Class="CMSPhoneApp.QueueListControl"
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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
d:DesignHeight="480" d:DesignWidth="480"
xmlns:local="clr-namespace:CMSPhoneApp"  >

<UserControl.Resources>       
    <local:VisibilityConverter x:Key="VisibilityConverter"/>
    <local:ColumSpanConverter x:Key="ColumSpanConverter"/>        
</UserControl.Resources>

    <ListBox x:Name="lst" HorizontalAlignment="Left"  Margin="6,6,0,0"  VerticalAlignment="Top" Width="400"    
                  ItemsSource="{Binding Path=MyQueue}"   
                      SelectedItem="{Binding Path=CurrentQueue, Mode=TwoWay}" Height="380" >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <Border BorderThickness="1,1,1,1" BorderBrush="Blue">
                            <Grid x:Name="grd" Width="auto" HorizontalAlignment="Stretch"  >                                  
                                    <Grid.RowDefinitions>                                          
                                    <RowDefinition Height="auto"/>
                                </Grid.RowDefinitions>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="35" />
                                        <ColumnDefinition Width="250"/>
                                        <ColumnDefinition Width="125" />
                                    </Grid.ColumnDefinitions>
                                    <Image Source="{Binding Type}" Grid.Row="0" Grid.Column="0"/>
                                    <TextBlock  Grid.Row="0" Grid.Column="1"  Grid.ColumnSpan= "{Binding isSpan, Converter={StaticResource ColumSpanConverter}}" Text="{Binding summary}" TextWrapping="Wrap"
                                             Style="{StaticResource PhoneTextAccentStyle}"  />
                                    <Button x:Name="btnAction" Grid.Row="0" Grid.Column="3" ClickMode="Press" Click="btnAction_Click" Style="{StaticResource ButtonStyle1}"
                                            Visibility="{Binding isVisibility, Converter={StaticResource VisibilityConverter}}"
                                         Tag="{Binding callNumber}">

                                        <Button.Content>
                                            <TextBlock Width="85" Height="70" Text="{Binding ActionCaption}" 
                                                       Style="{StaticResource LabelStyle_20}"     />
                                        </Button.Content>
                                    </Button>

                                </Grid>
                                </Border>
                    </DataTemplate>                    

                </ListBox.ItemTemplate>
            </ListBox>

OrientationChange コード:

 private void TestPage_OrientationChanged(
object sender, OrientationChangedEventArgs e)
    {
        ListBox lstControl = lst.lst;           
        Grid g = lstControl.ItemContainerGenerator.ContainerFromIndex(0) as Grid;   


        if (e.Orientation.ToString().Contains("Portrait"))                
             lst.lst.Height = 400;


        else                        
        lst.lst.Height = 120;
    }
4

1 に答える 1

0

列幅の絶対値の代わりに、パーセンテージまたは「スター サイズ」を使用する必要があります。スター サイズを使用すると、使用可能なサイズの変更に応じて、列の幅 (または行の高さ) を拡大または縮小できます。

使用例を次に示します。

<Grid.ColumnDefinitions>
    <ColumnDefinition Width=".1*" />
    <ColumnDefinition Width=".6*"/>
    <ColumnDefinition Width=".3*" />
</Grid.ColumnDefinitions>

これに加えて、ListBox の Width 値を削除し、使用可能なすべてのスペースを埋める必要があります。

于 2012-08-27T17:03:18.787 に答える