と を使用しておもちゃの WPF アプリケーションを作成しましButton
たItemsControl
。をクリックするたびButton
に、文字列「AnotherWord」が に追加されますItemsControl
。これで、固定幅 (500 ピクセル) でItemsControl
水平方向に表示されます。StackPanel
これは、ボタンを特定の回数 (実際には 6 回) クリックすると、新しく追加された文字列が次のように切り取られることを意味します。
「アナザーワードアナザーワードアナザーワードアナザーワードアナザーワードアナザーを」
これFontSize
は が 13 のときに発生します。12.7 に下げると、「AnotherWord」が 6 回出現する余地があります。私の質問は次のとおりです。オーバーフローを回避するために、実行時にこの調整を行う方法はありますか?
編集:
質問のコンテキストでは、の固定幅StackPanel
は必須です。500 ピクセルを超えるものは使用できません。フォントが 13 を超えてはならないというもう 1 つの要件。
ここに私が書いたすべてのコードがあります:
<!-- 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");
}
}
}