在可调整大小的窗口中使用ItemsControl
创建未知数量的标签。标签应位于ItemsControl
上的右侧。
当我将标签重新调整为更大的格式并同时保持彼此的偏移时,我很难找到一种方法让我的标签与窗口一起拉伸。我的装订工作完美。偏移也可以正常工作,但是现在我需要在重新调整窗口大小的同时拉伸标签,同时保持它们与Canvas.Left
的相对距离。
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<ItemsControl Grid.Row="0" ItemsSource="{Binding Path=Labels}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsItemsHost="True">
<Canvas.Background>
<SolidColorBrush Color="Black"/>
</Canvas.Background>
</Canvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding Path=OffSet}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Label Foreground="White" HorizontalAlignment="Left" Content="{Binding Path=Name}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
我无法找到解决方案并尝试了很多。有什么建议吗?
答案 0 :(得分:1)
正如我在评论中所建议的那样,我认为在这个实例中使用的更好的面板可能是UniformGrid
。只要您可以在代码中计算出您的学位值将会是什么,您可以创建一个可以绑定的集合。
<强> XAML:强>
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ItemsControl ItemsSource="{Binding Degrees}" VerticalAlignment="Top">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness="1" Margin="2">
<TextBlock Text="{Binding}" TextAlignment="Center" />
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Window>
<强>代码隐藏:强>
using System.Linq;
using System.Windows;
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Degrees = Enumerable.Range(1, 5).Select(x => x * 10 + 100).ToArray();
DataContext = this;
}
public int[] Degrees { get; private set; }
}
}
正如您在调整窗口大小时所看到的那样,各个元素会调整大小以占据适当的宽度。
我认为这是你所追求的事情,但如果没有请评论,我会尽力改善我的答案。