0

我确实有以下结构:

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

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

更新: 应该如何: 在此处输入图像描述

文本太长时的行为: 在此处输入图像描述 底部出现滚动条..

4

2 回答 2

1

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

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

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

Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MainWindow}, Path=ActualWidth}"
于 2013-07-31T14:56:58.963 回答
0

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

<ListBox Height="300" ItemsSource="{Binding Sites.View}" DisplayMemberPath="Name.ActualTranslation">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding}" TextWrapping="Wrap" MaxWidth="200"/>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>
于 2013-07-31T15:04:11.890 回答