我以编程方式将Textbox和Button加载到水平StackPanel中。按钮(只包含一个Image)的大小是固定的,但我无法让textbox填充其父按钮的可用宽度。代码如下所示:
StackPanel parent = new StackPanel() {
Orientation = Orientation.Horizontal,
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Top,
};
TextBox textbox = new TextBox() {
HorizontalAlignment = HorizontalAlignment.Stretch,
VerticalAlignment = VerticalAlignment.Top,
//MinWidth = 375,
};
Button btn = new Button() {
Content = new Image() {
MaxHeight = 40,
MaxWidth = 40,
MinHeight = 40,
MinWidth = 40,
Margin = new Thickness( 0 ),
Source = new BitmapImage(
new Uri( "btnimage.png", UriKind.Relative ) ),
},
HorizontalAlignment = HorizontalAlignment.Right,
BorderBrush = new SolidColorBrush( Colors.Transparent ),
Margin = new Thickness( 0 ),
};
btn.Click += ( ( s, e ) => OnBtnClicked( s, e, textbox ) );
parent.Children.Add( textbox );
parent.Children.Add( btn );如果我取消注释textbox的MinWidth设置,它将按我所希望的那样显示,但我不希望显式地指定宽度。我试着添加一个绑定,如下所示,但根本不起作用(文本框消失了!)
Binding widthBinding = new Binding() {
Source = parent.ActualWidth,
};
passwdBox.SetBinding( TextBox.WidthProperty, widthBinding );提前感谢您的帮助!
发布于 2011-01-01 02:46:39
使用Grid,而不是使用StackPanel (它总是试图保持元素尽可能小,以便它们都适合)。然后你可以这样做:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/> <!-- Note "*" means to use the rest of the space -->
<ColumnDefinition Width="40"/>
</Grid.ColumnDefinitions>
<TextBox Grid.Column="0"/>
<Button Grid.Column="1">
<Button.Content>
<Image .../>
</Button.Content>
</Button>
</Grid>如果您愿意,您可以将其转换为代码而不是XAML,XAML只是更容易在这里动态键入。
发布于 2011-01-01 02:45:23
正确的答案是不要这样做。请看我的答案at this question,同样的想法也适用于Windows Phone上的Silverlight。
在您的示例中,您应该使用DockPanel。
<toolkit:DockPanel>
<Button toolkit:DockPanel.Dock="Right" />
<TextBox /> <!-- fill is implied -->
</toolkit:DockPanel>https://stackoverflow.com/questions/4571722
复制相似问题