kle*_*neg 3 wpf xaml resize itemscontrol
我有一个ItemsControl,其ItemsSource绑定到项目列表。每个项目的大小都尽可能小,我需要的是控件,控件中的项目可以拉伸以适合所有可用空间。
我尝试在控件及其项目上(使用样式)将VerticalAlignment设置为Stretch。我还尝试将ItemsControl包装在DockPanel中,并将ItemsControl停靠在底部。我如何让ItemsControl动态调整大小?
某些(但不是全部)项目的可见性也设置为“已折叠”(通过相同样式)。这将是完成此工作的一个因素吗?
<DockPanel HorizontalAlignment="Stretch">
<ItemsControl DockPanel.Dock="Bottom"
ItemsSource="{Binding Owner.LoadPointCharts}"
HorizontalAlignment="Stretch"
x:Name="ItemsControl">
<ItemsControl.ItemContainerStyle><!--Height="{Binding Path=Height, RelativeSource={RelativeSource AncestorType={x:Type DockPanel}}}"-->
<Style TargetType="ContentPresenter">
<Setter Property="VerticalAlignment"
Value="Stretch" />
<Setter Property="Visibility">
<Setter.Value>
<MultiBinding Converter="{StaticResource CompareIndexToVisibilityConverter}">
<Binding Path="Index" />
<Binding Path="SelectedIndex" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style >
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</DockPanel>
Run Code Online (Sandbox Code Playgroud)
我认为可接受的答案有点太复杂了。同样,设置项目在网格中的位置可能会很烦人。您需要UniformGrid。
<ItemsControl>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,发现ItemsControl默认情况下StackPanel对他的孩子使用a 。将其替换为已Grid解决的问题:
<ItemsControl>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
编辑:这仅适用于一个子元素!
我认为这应该有效,具体取决于最外面的内容Grid。
默认情况下,网格将拉伸以填充其容器,并且它将导致其内容拉伸以填充其自身。如果您将 放入ItemsControlaDockPanel并DockPanel.Dock="Bottom"在 上进行设置ItemsControl,它将填充 的底部DockPanel,所以如果我理解正确的话,这不是您想要的。
<Grid>
<ItemsControl
ItemsSource="{Binding Owner.LoadPointCharts}"
x:Name="ItemsControl"
>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="VerticalAlignment" Value="Stretch" />
<Setter Property="HorizontalAlignment" Value="Stretch" />
<Setter Property="Visibility">
<Setter.Value>
<MultiBinding Converter="{StaticResource CompareIndexToVisibilityConverter}">
<Binding Path="Index" />
<Binding Path="SelectedIndex" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style >
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</Grid>
Run Code Online (Sandbox Code Playgroud)
Grid是一种 XAML 布局的瑞士军船锚。把它们扔得到处都是。
如果您想将其他内容停靠在 a 中DockPanel,这里有一个简单的DockPanel布局:
<Window xmnls:blah="blah blah etc.">
<Window.DataContext>
<local:MyViewModel />
</Window.DataContext>
<Grid>
<DockPanel>
<Menu DockPanel.Dock="Top">
<!-- Menu Items-->
</Menu>
<Grid>
<!--
This assumes we've got a DataTemplate in a resource dictionary
somewhere with DataType="{x:Type local:MyViewModel}"
-->
<ContentControl
Content="{Binding}"
/>
</Grid>
</DockPanel>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)