2010-12-31 2 views
1

TextboxButtonをプログラムで横方向にロードします。StackPanelボタンのサイズ(Imageのみを含む)は固定されていますが、親の利用可能な幅を埋めるためにテキストボックスを取得することはできません。私はそれがしたいが、私は明示的に幅を指定する必要はありませんしたいと、それが表示されたテキストボックスの設定MinWidthのコメントを解除した場合TextBoxの幅を親コンテナのActualWidthにバインドする

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

:これは、コードは次のようになります。すべてでは動作しないことが、以下のよう私はバインディングを追加してみました(テキストボックスはちょうど消える!)あなたの助けを

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

感謝を事前に!

答えて

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のちょうど簡単にオンザフライここで入力する:次に、あなたはこのような何かを行うことができます。

0

正解はしていません。私の答えat this questionを参照してください.Windows PhoneのSilverlightにも同じ考えが適用されます。

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

<toolkit:DockPanel> 
    <Button toolkit:DockPanel.Dock="Right" /> 
    <TextBox /> <!-- fill is implied --> 
</toolkit:DockPanel> 
+0

私は必要なもののようですが、Windows Phone用のSilverlight Toolkitで「DockPanel」が見つかりません。私はちょうど私が最新リリースを持っていることを確認するためにそれを再インストールしようとしましたが、まだ運がありません。 – Praetorian

+0

ツールキットコンポーネントの使用を決定するときは注意が必要です。これらはWPapの重要な考慮事項となるXapの全体的なサイズに追加されます。ツールキットdllを追加する唯一の理由が、この1つの機能を動作させることであるならば、ツールキット以外の代替ソリューションが求められるはずです。 – AnthonyWJones

+0

非常に良い点、アンソニー。 Silverlightツールキットをまだ使用していない場合は、グリッドを使用します。しかし、DockPanelを持つことは、さまざまなレイアウトに非常に役立ちます。ほとんどの場合、そのようなレイアウトにはグリッドを使用できますが、オースティンの答えで見られるように、グリッドベースのレイアウトは非常に冗長になります。 – Josh

関連する問題