1

Textboxプログラムで aと aButtonを水平にロードしていStackPanelます。ボタン ( のみを含むImage) のサイズは固定されていますが、親の使用可能な幅をテキストボックスで埋めることができません。コードは次のようになります。

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 );

テキストボックスの設定のコメントを外すMinWidthと、希望どおりに表示されますが、幅を明示的に指定する必要はありません。次のようにバインディングを追加しようとしましたが、まったく機能しません (テキストボックスが消えるだけです!)

Binding widthBinding = new Binding() {
  Source = parent.ActualWidth,
};
passwdBox.SetBinding( TextBox.WidthProperty, widthBinding );

事前にご協力いただきありがとうございます。

4

2 に答える 2

7

を使用する代わりにStackPanel(すべての要素が収まるように要素をできるだけ小さく保とうとします)、 を使用しGridます。次に、次のようなことができます。

<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 は、ここでオンザフライで入力する方が簡単です。

于 2010-12-31T18:46:38.833 に答える
0

正しい答えは、それをしないことです。この質問で私の回答を参照してください。Windows Phone の Silverlight にも同じ考えが当てはまります。

あなたの例では、を使用する必要がありますDockPanel

<toolkit:DockPanel>
    <Button toolkit:DockPanel.Dock="Right" />
    <TextBox /> <!-- fill is implied -->
</toolkit:DockPanel>
于 2010-12-31T18:45:22.933 に答える