2

次の質問があります。asListBoxと一緒に持ちたいです。このグリッドには 2 つの列が 2 つあります。最初の列幅を に、別の列幅を に設定したい。これを行う方法?コードをコピーします。DataTemplateGrid3**

<ListBox x:Name="commandListbox" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Stretch">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="3*" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>

                <TextBlock Grid.Column="0" Text="{Binding}"/>
                <TextBlock Grid.Column="1" Text="icon" />
           </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>                
</ListBox>
4

3 に答える 3

7

テンプレートをリソースに保存することをお勧めします。

<Window.Resources>
  <DataTemplate x:Key="DefaultTemplate">
    <Grid x:Name="GridItem" Width="200">
       <Grid.ColumnDefinitions>
           <ColumnDefinition Width="Auto" />
           <ColumnDefinition Width="Auto" />
       </Grid.ColumnDefinitions>

       <TextBlock x:Name="Parameter" Grid.Column="1" Text="{Binding Path=Name}" Margin="5,1,0,0" />
       <TextBlock x:Name="Value" Grid.Column="2" Text="{Binding Path=Age}" Margin="85,1,0,0" />

       <Line x:Name="Separator" X1="0" X2="0" Y1="0" Y2="20" SnapsToDevicePixels="True" Grid.Column="1" Stroke="Black" StrokeThickness="2" Margin="50,0,0,0" HorizontalAlignment="Left" />
   </Grid>
 </DataTemplate>
</Window.Resources>

リストボックスの定義:

<ListBox Name="MyListBox" ItemTemplate="{StaticResource DefaultTemplate}" />

コード C#:

public class Person
{
  public string Name
  {
    get;
    set;
  }

 public int Age
 {
   get;
   set;
 }
}

ObservableCollection を定義します。

private ObservableCollection<Person> MyListBoxData = new ObservableCollection<Person>();

コレクションにアイテムを追加します。

MyListBoxData.Add(new Person()
{
  Name = "Nick",
  Age = 21,
});

MyListBoxData.Add(new Person()
{
  Name = "Adam",
  Age = 11,
});

MyListBox.ItemsSource = MyListBoxData;

編集:

次に、最初の TextBlock の Width="3*"、Width="*" および Margin="-WidthGrid" を設定します。

<Grid x:Name="GridItem" Width="300">
 <Grid.ColumnDefinitions>
  <ColumnDefinition Width="3*" />
  <ColumnDefinition Width="*" />
 </Grid.ColumnDefinitions>

 <TextBlock x:Name="Parameter" Grid.Column="1" Text="{Binding Path=Name}" Margin="-220,0,0,0" />
 <TextBlock x:Name="Value" Grid.Column="2" Text="{Binding Path=Age}" Margin="0,0,0,0" />
</Grid>
于 2013-04-25T11:18:00.770 に答える
5

IsSharedSizeScope を使用して、生成されたグリッド全体で列のサイズ設定を共有します。自動幅の場合 (* サイズ設定では実行できません):

http://wpftutorial.net/DataTemplates.html経由

<ListBox ItemsSource="{Binding}" BorderBrush="Transparent" 
     Grid.IsSharedSizeScope="True"
     HorizontalContentAlignment="Stretch">
<ListBox.ItemTemplate>
    <DataTemplate>
        <Grid Margin="4">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="Auto" SharedSizeGroup="Key" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <TextBlock Text="{Binding Name}" FontWeight="Bold"  />
            <TextBox Grid.Column="1" Text="{Binding Value }" />
        </Grid>
    </DataTemplate>
</ListBox.ItemTemplate>

MSDN のコメントを参照してください

サイズ共有に参加している列と行は、スター サイズ設定を尊重しません。このシナリオでは、Star のサイジングは Auto として扱われます。リソース テンプレート内で IsSharedSizeScope が true に設定されていて、そのテンプレートの外部で SharedSizeGroup が定義されている場合、グリッド サイズの共有は機能しません。

于 2014-03-24T09:35:05.067 に答える
2
<ListBox x:Name="commandListbox" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" HorizontalAlignment="Stretch">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="0.75*" />
                    <ColumnDefinition Width="0.25*" />
                </Grid.ColumnDefinitions>

                <TextBlock Grid.Column="0" Text="{Binding}"/>
                <TextBlock Grid.Column="1" Text="icon" />
           </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>                
</ListBox>

私の理解が正しければ、1 列目に 3/4 スペース、2 列目に 1/4 スペースを探しています。上記の形式で幅を設定すると、問題が解決するはずです。

それが解決することを願っています。

于 2015-05-26T10:46:55.063 に答える