gpt4 book ai didi

c# - 动态减小 FontSize 以避免溢出

转载 作者:太空宇宙 更新时间:2023-11-03 22:00:49 26 4
gpt4 key购买 nike

我编写了一个带有 ButtonItemsControl 的玩具 WPF 应用程序。每次单击 Button 时,字符串“AnotherWord”都会添加到 ItemsControl。现在,ItemsControl 显示为水平方向的 StackPanel,具有固定宽度(500 像素)。这意味着当您点击按钮一定次数(实际上是六次)时,新添加的字符串会被截断,如下所示:

"AnotherWord AnotherWord AnotherWord AnotherWord AnotherWord AnotherWo"

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");
}
}
}

最佳答案

将您的 ItemsControl 放在 Viewbox 中并使用以下属性:

  • 最大宽度
  • 最大高度
  • 拉伸(stretch)
  • 拉伸(stretch)方向

编辑

并删除 StackPanelWidthHeight 属性。

编辑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 的水平对齐方式,使其不会被拉伸(stretch)以填充网格。我放了“中心”,用你想要的任何东西代替。

...
<Viewbox
HorizontalAlignment="Center"
StretchDirection="DownOnly"
Grid.Row="0"
MaxWidth="500"
Stretch="Uniform">
...

关于c# - 动态减小 FontSize 以避免溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10192363/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com