我已经编写了一个带有 aButton
和ItemsControl
. 每次单击 时Button
,都会将字符串“AnotherWord”添加到ItemsControl
. 现在,ItemsControl
它显示为水平方向StackPanel
,具有固定宽度(500 像素)。这意味着当您单击按钮一定次数(实际上是六次)时,新添加的字符串会被剪切,如下所示:
“另一个字另一个字另一个字另一个字另一个字另一个我”
这发生在FontSize
13 时;如果你把它降低到 12.7,那么“AnotherWord”就有第六次出现的空间。我的问题是:有没有办法在运行时进行这种调整以避免溢出?
编辑:
在问题的上下文中,固定宽度StackPanel
是强制性的 - 我们不能使用超过我们拥有的 500 像素。另一个要求是字体不能大于 13。
这是我写的所有代码:
<!-- MainWindow.xaml -->
<Window x:Class="FontSize.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Window.Resources>
<DataTemplate x:Key="labelTemplate">
<Label FontSize="13" Content="AnotherWord"></Label>
</DataTemplate>
<ItemsPanelTemplate x:Key="panelTemplate">
<StackPanel Orientation="Horizontal" Width="500" Height="50" />
</ItemsPanelTemplate>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<ItemsControl Grid.Row="0" ItemsSource="{Binding Path=MyStrings}" ItemTemplate="{StaticResource labelTemplate}"
ItemsPanel="{StaticResource panelTemplate}" />
<Button Grid.Row="1" Click="Button_Click"></Button>
</Grid>
</Window>
// MainWindow.xaml.cs
using System.Collections.ObjectModel;
using System.Windows;
namespace FontSize
{
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
MyStrings = new ObservableCollection<string>();
}
public ObservableCollection<string> MyStrings
{
get { return (ObservableCollection<string>) GetValue(MyStringsProperty); }
set { SetValue(MyStringsProperty, value); }
}
private static readonly DependencyProperty MyStringsProperty =
DependencyProperty.Register("MyStrings", typeof (ObservableCollection<string>), typeof (Window));
private void Button_Click(object sender, RoutedEventArgs e)
{
MyStrings.Add("AnotherWord");
}
}
}