我的应用程序是用WPF编写的。我有一个初始Width = 400
的窗口。在该窗口中,我有一个带有StackPanel的DockPanel,其中包含一个名为ElementsPanel
的自定义UserControl。
以下是代码:
<Window x:Class="Adiastemo2.EditWindow" ... Height="500" Width="400" x:Name="view2" ... >
<DockPanel>
<StackPanel Height="70" DockPanel.Dock="Top" Background="Beige">
<local:ElementsPanel/>
</StackPanel> ...
ElementsPanel控件由一个带有ListBox
的StackPanel组成。 ListBox的ItemsPanel使用简单的ScrollViewer和ItemsPresenter进行模板化。
这是代码:
<UserControl x:Class="Adiastemo2.ElementsPanel" ...
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="70">
<StackPanel Orientation="Horizontal" Margin="0,0,0,20" >
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal" Background="BlanchedAlmond"/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.Template>
<ControlTemplate TargetType="ListBox">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Hidden">
<ItemsPresenter/>
</ScrollViewer>
</ControlTemplate>
</ListBox.Template>
... <!-- Some test content comprising several 50x50 Buttons -->
</ListBox>
</StackPanel>
每当Window调整大小时,我都希望我的ElementsPanel及其内容的宽度调整大小,以便在显示太多按钮时启用水平滚动。现在我得到的是:
500x400窗口:http://screenshooter.net/100101493/qiaxocp
更广泛:http://screenshooter.net/100101493/utkcyel
我如何实现目标?
答案 0 :(得分:2)
将UserControl的 Width
绑定到Window的 ActualWidth
:
<Window x:Class="Adiastemo2.EditWindow" ... Height="500"
Width="400" x:Name="view2" ... >
<DockPanel>
<StackPanel Height="70" DockPanel.Dock="Top" Background="Beige">
<local:ElementsPanel Width="{Binding ActualWidth,
ElementName=view2}"/>
</StackPanel> ...