我是一个wpf新手&非常喜欢它。不过,我有一个布局问题,希望有人能帮助我。我需要建立一个人物属性编辑器。这些由2个固定属性组成 - 名字&姓氏,加上其他属性(如年龄,性别等)的可变桶。wpf新手 - 如何布置可变属性集,使它们与固定属性显示在同一列中
我建立了一个对话框,其中包含2个固定属性的文本框和一个列表框可变属性。
<Grid Name="mainGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="10"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Label Grid.Column="0" Grid.Row="0" VerticalAlignment="Center">First Name:</Label>
<TextBox Name="tbFirstName" Grid.Column="2" Grid.Row="0" MinWidth="100" Margin="5" Text="{Binding Path=FirstName}"/>
<Label Grid.Column="0" Grid.Row="1" VerticalAlignment="Center">Last Name:</Label>
<TextBox Name="tbLastName" Grid.Column="2" Grid.Row="1" MinWidth="100" Margin="5" Text="{Binding Path=LastName, UpdateSourceTrigger=PropertyChanged}"/>
<ListBox Name="lstAttributes" Grid.Row="2" Grid.ColumnSpan="3" ItemsSource="{Binding Path=Attributes, UpdateSourceTrigger=PropertyChanged}"/>
<StackPanel Orientation="Horizontal" Grid.Row="3" Grid.ColumnSpan="3" HorizontalAlignment="Right">
<Button Name="btnOk" IsDefault="True" Click="btnOk_Click" Grid.Column="0" Grid.Row="2" MinWidth="60" Margin="5">Ok</Button>
<Button Name="btnCancel" IsCancel="True" Grid.Column="0" Grid.Row="2" MinWidth="60" Margin="5">Cancel</Button>
</StackPanel>
</Grid>
我有一个数据层,返回一个绑定的人物件。这包含绑定到列表框的属性列表 。为了支持不同类型的属性,这些属性从一个公共基类中派生。即IntegerAttribute:AttributeBase用来表示'Age'属性。
我然后使用数据模板来呈现取决于属性的类型正确的控制:
<Window.Resources>
<DataTemplate DataType="{x:Type reg:IntegerAttribute}">
<StackPanel Orientation="Horizontal">
<TextBlock Grid.Column="1" Text="{Binding Name}"/>
<TextBox Grid.Column="3" Text="{Binding Path=Value, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type reg:TextAttribute}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<TextBox Text="{Binding Path=Value, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
</DataTemplate>
<DataTemplate DataType="{x:Type reg:SingleChoiceAttribute}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}"/>
<ComboBox ItemsSource="{Binding Path=Choices, UpdateSourceTrigger=PropertyChanged}" SelectedValue="{Binding Path=Value, UpdateSourceTrigger=PropertyChanged}"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
但这里的问题。我希望变量集属性与固定属性出现在相同的列中。我尝试使用SharedSizeGroup,但这似乎不起作用。
非常感谢,
NickD
感谢您的答复。我只是尝试了这些更改,不幸的是,这适用于固定宽度的列,它不适用于Auto或*。如果我将第一列或最后一列设置为自动或者*对话框以列对齐的方式正确打开,但最后一列从左向右移动对话框最终消失。任何想法,为什么这可能会发生,假设它每次都在重新绘制列... – NickUk 2010-01-06 13:50:03
我相信这是正确设置IsSharedSizeScope的问题...我会再看看并更新。 – 2010-01-06 14:10:25
谢谢,我已经将mainGrid设置为true,并将数据模板设置为false,如您所建议的那样。 – NickUk 2010-01-06 15:22:59