当窗口在wpf中放大时,如何拉伸我的(未知数量)标签?

时间:2015-01-26 09:45:53

标签: c# wpf

Assignement

在可调整大小的窗口中使用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>

我无法找到解决方案并尝试了很多。有什么建议吗?

1 个答案:

答案 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; }
    }
}

正如您在调整窗口大小时所看到的那样,各个元素会调整大小以占据适当的宽度。

我认为这是你所追求的事情,但如果没有请评论,我会尽力改善我的答案。