1

WPF でシンプルなメニューバーを実現しようとしています。

XAML は次のとおりです。

<Page
 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
 <DockPanel>  
    <DockPanel Background="Black" VerticalAlignment="Top" LastChildFill="True" DockPanel.Dock="Top" Height="28">
        <ToggleButton Content="--" Visibility="Collapsed" />
        <StackPanel Orientation="Horizontal">
           <Button Content="Add" />
           <Button Content="Expand" /> 
        </StackPanel>
        <StackPanel HorizontalAlignment="Right" Orientation="Horizontal">
           <TextBox Text="Search" MinWidth="80" Width="200" />
           <Button Content="X" Margin="0,1,50,0" />
        </StackPanel>
    </DockPanel>
 </DockPanel>
</Page>

見栄えは良いのですが、ページの幅を小さくすると、最後の子 (検索テキスト ボックスのある Stackpanel) が左のアイテムの後ろに隠れてしまいます。このように: http://s9.postimage.org/m0tkrobwd/printscreen.png

MinWidth を達成するのに十分なスペースがある場合、テキストボックスのサイズが変更されるとよいでしょう...それは可能ですか?

4

4 に答える 4

1

トリッキーなことは、コントロール(この場合はSearchTextBox)に配置を与えながら、最大で使用可能なスペースをキャッチすることMaxWidthです。この答えに感謝します。

<DockPanel>
    <DockPanel Background="Black" DockPanel.Dock="Top" Height="28">
        <ToggleButton DockPanel.Dock="Left" Content="--" Visibility="Collapsed" />
        <StackPanel DockPanel.Dock="Left" Orientation="Horizontal">
            <Button Content="Add" />
            <Button Content="Expand" />
        </StackPanel>
        <Button DockPanel.Dock="Right" Content="X" />
        <Border Name="Container">
            <TextBox Text="Search" HorizontalAlignment="Right"
                     Width="{Binding ElementName=Container, Path=ActualWidth}" MaxWidth="200" />                                
        </Border>
     </DockPanel>        
</DockPanel>

コンテナも別のコントロールになる可能性があります。

于 2012-07-25T12:29:05.410 に答える
0
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="50"/>
    </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                      <ColumnDefinition Width="*"/>
                    <ColumnDefinition MaxWidth="200" MinWidth="80"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
                <ToggleButton Content="--" Visibility="Collapsed" />
                <Button Content="Add"  Grid.Column="1"/>
                <Button Content="Expand"  Grid.Column="2"/>
                <TextBox Text="Search" Grid.Column="4"/>
                <Button Content="X" Margin="0,1,50,0" Grid.Column="5" />
            </Grid>

MaxWidth と MinWidth を TextBox に与える代わりに、Grid Column.I に与えます。これが役立つことを願っています。

于 2012-07-25T10:15:38.630 に答える
0

こんにちは TextBox Not Width の MaxWidth と MinWidth を設定します。幅を設定すると、優先順位が最も高くなるため、MinWidth は機能しません。これが役立つことを願っています。

 <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
                <ToggleButton Content="--" Visibility="Collapsed" />
                <Button Content="Add"  Grid.Column="1"/>
                <Button Content="Expand"  Grid.Column="2"/>
                <TextBox Text="Search" MinWidth="80" MaxWidth="600" Grid.Column="3" ClipToBounds="True" />
                <Button Content="X" Margin="0,1,50,0" Grid.Column="4"/>
            </Grid>
于 2012-07-25T09:20:08.990 に答える
0

ページのサイズが原因で、両方のスタックパネルをページに表示するには不十分です。このために、ページの最小サイズを使用できます。コントロールが隠れてしまうのを防ぎます。

また、どんなデザインにするかはあなた次第です。スタックパネルではなくグリッドを使用できます。

于 2012-07-25T09:22:45.293 に答える