UserControl匹配Window的大小

时间:2014-08-10 13:18:39

标签: c# wpf xaml user-controls listbox

我的应用程序是用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

我如何实现目标?

1 个答案:

答案 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> ...