1

と を使用しておもちゃの WPF アプリケーションを作成しましButtonItemsControl。をクリックするたび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");
        }
    }
}
4

1 に答える 1

4

ビューボックスItemsControlに入れて、次のプロパティで遊んでください。

  • 最大幅
  • 最大高さ
  • ストレッチ
  • ストレッチ方向

編集

Width&Heightのプロパティを削除しますStackPanel

編集 2

そのようなことを試してください:

<!-- 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"/>
        </ItemsPanelTemplate>
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Viewbox Grid.Row="0" MaxWidth="500" Stretch="Uniform">
            <ItemsControl 
                ItemsSource="{Binding Path=MyStrings}"
                ItemTemplate="{StaticResource labelTemplate}" 
                ItemsPanel="{StaticResource panelTemplate}" />
        </Viewbox>
        <Button Grid.Row="1"  Click="Button_Click"></Button>
    </Grid>
</Window>

編集 3

の水平方向の位置合わせを変更してViewbox、グリッドを埋めるために引き伸ばされないようにします。私は「センター」を置きました。あなたが望むものに置き換えてください。

...
<Viewbox 
    HorizontalAlignment="Center" 
    StretchDirection="DownOnly"
    Grid.Row="0"
    MaxWidth="500"
    Stretch="Uniform">
...
于 2012-04-17T15:38:41.097 に答える