首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将文本框的宽度绑定到其父容器的ActualWidth

将文本框的宽度绑定到其父容器的ActualWidth
EN

Stack Overflow用户
提问于 2011-01-01 02:34:15
回答 2查看 6.5K关注 0票数 1

我以编程方式将TextboxButton加载到水平StackPanel中。按钮(只包含一个Image)的大小是固定的,但我无法让textbox填充其父按钮的可用宽度。代码如下所示:

代码语言:javascript
运行
复制
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设置,它将按我所希望的那样显示,但我不希望显式地指定宽度。我试着添加一个绑定,如下所示,但根本不起作用(文本框消失了!)

代码语言:javascript
运行
复制
Binding widthBinding = new Binding() {
  Source = parent.ActualWidth,
};
passwdBox.SetBinding( TextBox.WidthProperty, widthBinding );

提前感谢您的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-01 02:46:39

使用Grid,而不是使用StackPanel (它总是试图保持元素尽可能小,以便它们都适合)。然后你可以这样做:

代码语言:javascript
运行
复制
<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只是更容易在这里动态键入。

票数 7
EN

Stack Overflow用户

发布于 2011-01-01 02:45:23

正确的答案是不要这样做。请看我的答案at this question,同样的想法也适用于Windows Phone上的Silverlight。

在您的示例中,您应该使用DockPanel

代码语言:javascript
运行
复制
<toolkit:DockPanel>
    <Button toolkit:DockPanel.Dock="Right" />
    <TextBox /> <!-- fill is implied -->
</toolkit:DockPanel>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4571722

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档