【问题标题】:LastChildFill with group of controlsLastChildFill 带有一组控件
【发布时间】:2014-01-22 19:27:07
【问题描述】:

我有一个 DockPanel,其中一行定义为 LastChildFill="true",行中的最后一项是两个独立的控件,代表一个文件选择器 - 一个用于文件路径的 TextBox,后跟一个显示打开文件的 Button对话框(填充文本框)。我想将这组控件停靠在行尾,以便拉伸文本框而不是按钮以填充空间。这可能吗?

<DockPanel Grid.Row="1"
       Margin="3"
       LastChildFill="True">
    <!-- * additional controls omitted * -->
    <TextBox x:Name="TExecutable"
             Width="200"
             VerticalContentAlignment="Center"
             Text="{Binding Locale[event_SampleExecutable],
                            Source={StaticResource PluginViewModel}}"/>
    <Button Margin="3 0 0 0"
            VerticalContentAlignment="Center"
            Command="{Binding SelectExecutableCommand}"
            Content="{Binding Locale[event_SelectExecutableText],
                              Source={StaticResource PluginViewModel}}" />
</DockPanel>

【问题讨论】:

    标签: wpf


    【解决方案1】:

    你需要做以下事情:

    1. 在 XAML 中首先放置 Button,即在 TextBox 上方,以便 TextBox 将成为 DockPanel 中的 LastChild 并将成为完全拉伸的候选者。
    2. 从 TextBox 中删除硬编码的宽度,因为您希望它被拉伸。
    3. 在按钮上设置DockPanel.Dock="Right",使其位于文本框的右侧。
    4. 在文本框上设置DockPanel.Dock="Left"

      <DockPanel Grid.Row="1"
                 Margin="3"
                 LastChildFill="True">
          <!-- * additional controls omitted * -->
          <Button Margin="3 0 0 0"
                  VerticalContentAlignment="Center"
                  DockPanel.Dock="Right"
                  Command="{Binding SelectExecutableCommand}"
                  Content="{Binding Locale[event_SelectExecutableText],
                                Source={StaticResource PluginViewModel}}" />
          <TextBox x:Name="TExecutable"
                   DockPanel.Dock="Left"
                   VerticalContentAlignment="Center"
                   Text="{Binding Locale[event_SampleExecutable],
                             Source={StaticResource PluginViewModel}}"/>
      </DockPanel>
      

    【讨论】:

      【解决方案2】:

      用网格包裹:

      <DockPanel 
             Margin="3"
             LastChildFill="True">
          <!-- * additional controls omitted * -->
          <Grid>
              <Grid.ColumnDefinitions>
                  <ColumnDefinition />
                  <ColumnDefinition Width="Auto" />
              </Grid.ColumnDefinitions>
      
              <TextBox x:Name="TExecutable"
                       VerticalContentAlignment="Center"
                       Text="{Binding Locale[event_SampleExecutable],
                                      Source={StaticResource PluginViewModel}}"/>
              <Button Margin="3 0 0 0" Grid.Column="1"
                      VerticalContentAlignment="Center"
                      Command="{Binding SelectExecutableCommand}"
                      Content="{Binding Locale[event_SelectExecutableText],
                                        Source={StaticResource PluginViewModel}}" />
          </Grid>
      </DockPanel>
      

      【讨论】:

      • 我试过了,结果是一个 1px 宽的 TextBox 和一个完全拉伸的 Button。
      猜你喜欢
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-29
      • 2018-12-28
      • 1970-01-01
      • 2019-09-07
      相关资源
      最近更新 更多