尝试在C#和WPF中调整TextBox和字体大小,只能二选一

3
我尝试在窗口调整大小时调整文本框和文本框内的文本大小。 我似乎只能做到其中一种。
调整文本框大小是有效的,但我无法调整文本框内的文字大小: original size resized 上面示例的代码:
    <Grid Grid.Row="1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="133*"/>
            <ColumnDefinition Width="20*"/>
            <ColumnDefinition Width="20*"/>
        </Grid.ColumnDefinitions>
        <Button Content="Button" Grid.Column="2"/>
        <Button Content="Button" Grid.Column="1"/>
        <TextBox TextWrapping="Wrap" VerticalContentAlignment="Center"/>
    </Grid>

调整字体大小是可行的,但我无法使文本框填满我正在使用的视口框: 原始图片 调整大小后的图片

上面示例的代码:

    <Grid Grid.Row="1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="133*"/>
            <ColumnDefinition Width="20*"/>
            <ColumnDefinition Width="20*"/>
        </Grid.ColumnDefinitions>
        <Button Content="Button" Grid.Column="2"/>
        <Button Content="Button" Grid.Column="1"/>
        <Viewbox Stretch="Uniform">
            <TextBox TextWrapping="Wrap" VerticalContentAlignment="Center"/>
        </Viewbox>
    </Grid>

使用Stretch="Fill"(方向正确,但我更喜欢保持统一,而UniformToFill会做一些奇怪的事情,我甚至看不出发生了什么) 填充
2个回答

7
您可以使用转换器。
public class FontSizeConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        double actualHeight = System.Convert.ToDouble(value);
        int fontSize = (int)(actualHeight * .5);
        return fontSize;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

XAML:

....
<Window.Resources>
    <local:FontSizeConverter x:Key="fontSizeCon" />
</Window.Resources>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="9*" />
        <RowDefinition Height="1*" />
    </Grid.RowDefinitions>     
    <Grid Grid.Row="1">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="133*"/>
            <ColumnDefinition Width="20*"/>
            <ColumnDefinition Width="20*"/>
        </Grid.ColumnDefinitions>
        <Button Content="Button" Grid.Column="2"/>
        <Button Content="Button" Grid.Column="1"/>
        <TextBox TextWrapping="Wrap" VerticalContentAlignment="Center"
                 FontSize="{Binding Path=ActualHeight, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Grid}, Converter={StaticResource fontSizeCon}}"/>
    </Grid>      
</Grid>
...

结果:

在此输入图片描述

在此输入图片描述


2
谢谢。我还在学习WPF,甚至不得不查找一些东西才能看到你在这里做了什么。我不仅得到了一个可行的解决方案,而且在研究这个解决方案时也学到了一些东西。 - sdouble
另外,我想补充一下,因为我不习惯在IDE内部运行之前构建项目,所以我花了一些时间才弄清楚。如果没有构建,它就看不到命名空间,这只是我之前评论的一个附加信息。 - sdouble

1
这样的东西合适吗?
<Grid Grid.Row="1">
    <Grid.ColumnDefinitions>
            <ColumnDefinition Width="133*"/>
            <ColumnDefinition Width="20*"/>
            <ColumnDefinition Width="20*"/>
        </Grid.ColumnDefinitions>
        <Button Content="Button" Grid.Column="2"/>
        <Button Content="Button" Grid.Column="1"/>
        <Viewbox StretchDirection="Both" Stretch="Uniform">
            <TextBox Text="some text"></TextBox>
        </Viewbox>
    </Grid>

这对我来说和我的第二个例子做的一样。 - sdouble

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接