【问题标题】:WPF disable ListBox autosizing in uniform gridWPF 在统一网格中禁用 ListBox 自动调整大小
【发布时间】:2013-07-31 23:40:43
【问题描述】:

我确实有以下结构:

<UniformGrid HorizontalAlignment="Stretch"  Grid.Row="0" VerticalAlignment="Top" Columns="6"  DockPanel.Dock="Right"  >
  <StackPanel HorizontalAlignment="Stretch">
      <DockPanel Background="#FF393939"  >
          <Label Content="{lex:Loc Site}" Foreground="#FFE0E0E0"/>
      </DockPanel>
      <ListBox Height="300" ItemsSource="{Binding Sites.View}" DisplayMemberPath="Name.ActualTranslation">
      </ListBox>
  </StackPanel>...

我的 UniformGrid 中的这些堆栈面板应该分布在整个主窗口(或视图)上......仍然如果列表框中有一个项目具有更长的字符串,它需要比标准宽度更多的位置,它会自动调整字符串并且我必须垂直滚动。

如果内容没有足够的位置,我不希望列表视图获得宽度。 我的 MainWindow 中也有一个滚动查看器,该视图被放置在其中......

如何使统一网格保持与 MainWindow 相同的宽度-...

我已经尝试为 MainWindow 命名并将宽度绑定到如下内容:Width="{Binding ElementName=MainWindow, Path=ActualWdith}" ..

虽然我得到了错误:

Cannot find source for binding with reference 'ElementName=MainWindow'. BindingExpression:Path=ActualWdith; DataItem=null;

我能做些什么来解决这个问题? 如果您需要更多信息或我的错误描述不清楚,请随时询问。

更新: 应该如何:

文本过长时的行为: 并且底部会出现一个滚动条..

【问题讨论】:

  • 绑定到ActualWidth 似乎是个坏主意,但根本没有必要这样做。如果设置为拉伸,UniformGrid 应该保持相同的大小。你能把你看到的截图显示一下吗?
  • 我已经更新了我的问题

标签: wpf xaml


【解决方案1】:

如果您尝试按名称访问 WPF 对象,则它需要有x:Key="name",这在上面的代码中没有显示,即

<Window x:Name="MainWindow" ....

或者,您可以沿着树往回走,直到找到正确类型的对象,

Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MainWindow}, Path=ActualWidth}"

【讨论】:

    【解决方案2】:

    或者,您可以简单地更改显示文本的方式以限制其宽度

    <ListBox Height="300" ItemsSource="{Binding Sites.View}" DisplayMemberPath="Name.ActualTranslation">
      <ListBox.ItemTemplate>
        <DataTemplate>
          <TextBlock Text="{Binding}" TextWrapping="Wrap" MaxWidth="200"/>
        </DataTemplate>
      </ListBox.ItemTemplate>
    </ListBox>
    

    【讨论】:

    • 我不知道 ListBox 或包含的文本块中的 MaxWidth...因为这与窗口的大小有关。
    猜你喜欢
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 2012-06-24
    • 2013-05-11
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多